A Temporal Extension Library for PyTorch Geometric

Overview


PyPI Version Docs Status Repo size Code Coverage Build Status

Documentation | External Resources | Datasets

PyTorch Geometric Temporal is a temporal (dynamic) extension library for PyTorch Geometric.

The library consists of various dynamic and temporal geometric deep learning, embedding, and spatio-temporal regression methods from a variety of published research papers. In addition, it consists of an easy-to-use dataset loader and iterator for dynamic and temporal graphs, gpu-support. It also comes with a number of benchmark datasets with temporal and dynamic graphs (you can also create your own datasets).


Citing

If you find PyTorch Geometric Temporal and the new datasets useful in your research, please consider adding the following citation:

@misc{pytorch_geometric_temporal,
      author = {Benedek, Rozemberczki and Paul, Scherer},
      title = {{PyTorch Geometric Temporal}},
      year = {2020},
      publisher = {GitHub},
      journal = {GitHub repository},
      howpublished = {\url{https://github.com/benedekrozemberczki/pytorch_geometric_temporal}},
}

A simple example

PyTorch Geometric Temporal makes implementing Dynamic and Temporal Graph Neural Networks quite easy - see the accompanying tutorial. For example, this is all it takes to implement a recurrent graph convolutional network with two consecutive graph convolutional GRU cells and a linear layer:

import torch
import torch.nn.functional as F
from torch_geometric_temporal.nn.recurrent import GConvGRU

class RecurrentGCN(torch.nn.Module):

    def __init__(self, node_features, num_classes):
        super(RecurrentGCN, self).__init__()
        self.recurrent_1 = GConvGRU(node_features, 32, 5)
        self.recurrent_2 = GConvGRU(32, 16, 5)
        self.linear = torch.nn.Linear(16, num_classes)

    def forward(self, x, edge_index, edge_weight):
        x = self.recurrent_1(x, edge_index, edge_weight)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.recurrent_2(x, edge_index, edge_weight)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.linear(x)
        return F.log_softmax(x, dim=1)

Methods Included

In detail, the following temporal graph neural networks were implemented.

Discrete Recurrent Graph Convolutions

Temporal Graph Convolutions

Auxiliary Graph Convolutions


Head over to our documentation to find out more about installation, creation of datasets and a full list of implemented methods and available datasets. For a quick start, check out the examples in the examples/ directory.

If you notice anything unexpected, please open an issue. If you are missing a specific method, feel free to open a feature request.


Installation

PyTorch 1.7.0

To install the binaries for PyTorch 1.7.0, simply run

$ pip install torch-scatter==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.7.0.html
$ pip install torch-sparse==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.7.0.html
$ pip install torch-cluster==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.7.0.html
$ pip install torch-spline-conv==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.7.0.html
$ pip install torch-geometric
$ pip install torch-geometric-temporal

where ${CUDA} should be replaced by either cpu, cu92, cu101, cu102 or cu110 depending on your PyTorch installation.

cpu cu92 cu101 cu102 cu110
Linux
Windows
macOS

PyTorch 1.6.0

To install the binaries for PyTorch 1.6.0, simply run

$ pip install torch-scatter==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.6.0.html
$ pip install torch-sparse==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.6.0.html
$ pip install torch-cluster==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.6.0.html
$ pip install torch-spline-conv==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.6.0.html
$ pip install torch-geometric
$ pip install torch-geometric-temporal

where ${CUDA} should be replaced by either cpu, cu92, cu101 or cu102 depending on your PyTorch installation.

cpu cu92 cu101 cu102
Linux
Windows
macOS

Running tests

$ python setup.py test

Running examples

$ cd examples
$ python gconvgru_example.py

License

Comments
  • temporal graph classification

    temporal graph classification

    I'm wondering if there is an example of classification carried out for data represented as temporal graphs?

    To be precise: in my use case I have for instance a sequence of 100 graphs representing together a single entity/object. Next, I have 200 entities. Is there an easy way to input those 200 data instances (with ground truth classification labels) to one of the numerous deep learning architectures implemented in this repo to obtain instance representations useful in the classification task? Or simply obtain predicted labels? Is there an example for this or did I miss it ? (apologies if I did).

    Thank you for your help in advance.

    opened by krzysztoffiok 26
  • Question about example code

    Question about example code

    Hi, I've been trying to reuse the example code, MPNNLSTM, GCLSTM, and GConvLSTM with my own dataset. My MSE errors are around .2 but the models do not return correct target values. When I run the examples the MSE is around 1. What does MSE represent? How should I structure data my data for these models? I have a graph with 20 nodes, 2 features per node, and 32 edges. The dataset has 360 separate graphs. My dataset looks similar to the one used in MPNNLSTM.

    opened by smatovski 14
  • [Bug?] the way to set GCN.weight in EvolveGCN.

    [Bug?] the way to set GCN.weight in EvolveGCN.

    Hi @benedekrozemberczki, I found that the gradient function may be lost in the implementation of EvolveGCN. The reason for this should be the following line of code: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/blob/bd6fac946378507a729b5723e9ace46a9dc0cbe1/torch_geometric_temporal/nn/recurrent/evolvegcno.py#L69 And here is a demo try to verify it:

    import torch
    
    torch.manual_seed(123)
    
    
    class MyModel(torch.nn.Module):
        def __init__(self):
            super().__init__()
            self.toy_model = ToyModel(weight=True)
    
        def forward(self, x):
            W = self.toy_model.weight
            self.toy_model.weight = torch.nn.parameter.Parameter(W)
            return self.toy_model(x)
    
    
    class MyModelParam(torch.nn.Module):
        def __init__(self):
            super().__init__()
            self.W = torch.nn.parameter.Parameter(torch.Tensor(2, 3).fill_(0.5))
            self.toy_model = ToyModel(weight=False)
    
        def forward(self, x):
            W = self.W
            return self.toy_model(x, weight=W)
    
    
    class ToyModel(torch.nn.Module):
        def __init__(self, weight=True):
            super().__init__()
            if weight:
                self.weight = torch.nn.parameter.Parameter(torch.Tensor(2, 3).fill_(0.5))
            else:
                self.register_parameter('weight', None)
            # self.func = torch.nn.parameter.Parameter(torch.Tensor(2, 2).fill_(0.1))
    
        def forward(self, x, weight=None):
            if weight is not None:
                w = weight
            else:
                w = self.weight
            # x = self.func * x
            x = torch.matmul(x, w)
            return x
    
    
    x = torch.Tensor(1, 2).fill_(0.8)
    y = torch.Tensor(1, 3).fill_(0.7)
    print("################## Test 1: reset GCN.weight by nn.Parameter()##################")
    model = MyModel()
    print("toyModel weight before:")
    print(model.toy_model.weight)
    optim = torch.optim.SGD(model.parameters(), lr=1e-2)
    
    # print("x: {}".format(x))
    # print("y: {}".format(y))
    prediction = model(x)
    loss = (prediction - y).sum()
    loss.backward()
    optim.step()
    print("toyModel weight after:")
    print(model.toy_model.weight)
    
    ########################## Test 2
    print("################## Test 2: pass weight as a parameter during forward##################")
    model_param = MyModelParam()
    print("model param weight before:")
    print(model_param.W)
    optim_param = torch.optim.SGD(model_param.parameters(), lr=1e-2)
    x_param = torch.Tensor(1, 2).fill_(0.8)
    y_param = torch.Tensor(1, 3).fill_(0.7)
    # print("x_param: {}".format(x_param))
    # print("y_param: {}".format(y_param))
    prediction_param = model_param(x_param)
    loss_param = (prediction_param - y_param).sum()
    loss_param.backward()
    optim_param.step()
    print("model param weight after:")
    print(model_param.W)
    

    result is here:

    ################## Test 1: reset GCN.weight by nn.Parameter()##################
    toyModel weight before:
    Parameter containing:
    tensor([[0.5000, 0.5000, 0.5000],
            [0.5000, 0.5000, 0.5000]], requires_grad=True)
    toyModel weight after:
    Parameter containing:
    tensor([[0.5000, 0.5000, 0.5000],
            [0.5000, 0.5000, 0.5000]], requires_grad=True)
    ################## Test 2: pass weight as a parameter during forward##################
    model param weight before:
    Parameter containing:
    tensor([[0.5000, 0.5000, 0.5000],
            [0.5000, 0.5000, 0.5000]], requires_grad=True)
    model param weight after:
    Parameter containing:
    tensor([[0.4920, 0.4920, 0.4920],
            [0.4920, 0.4920, 0.4920]], requires_grad=True)
    
    Process finished with exit code 0
    

    We can see that if we set model.weight in each batch iter by nn.paramter.Parameter(), the weight has not been updated.
    One way to fix it should be to pass a new weight during every forward. But pyG does not seem to provide the corresponding interface.

    opened by maqy1995 10
  • Tutorial for creating custom dataset for multiple dynamic graphs?

    Tutorial for creating custom dataset for multiple dynamic graphs?

    Hi Benedek!

    I wonder if there is a tutorial for creating a custom dataset for multiple dynamic graphs?

    I want to follow a code snippet so I can play around to learn how to do that.

    Thanks in advance. :)

    opened by johnnytam100 9
  • First commit for heterogeneous graph support

    First commit for heterogeneous graph support

    This includes:

    • a new data-structure StaticHeteroGraphTemporalSignal that works like StaticGraphTemporalSignal but with torch_geometric HeteroData objects as snapshots; instead of np arrays, dictionaries wirth key(node/edge types as strings)/value(indices/features as np arrays) are expected
    • code tests for the new data-structure
    • documentation for the new data-structure

    Feedback is welcome! If you think it makes sense to extend your package like that it would be great to open a new branch for heterogeneous support where we can go on working in this direction. Thanks and cheers, Gregor

    opened by doGregor 9
  • Extreme RAM consumption by multilayer models

    Extreme RAM consumption by multilayer models

    Hi Benedek! First of all, thank you for this project, I hope it has a bright future ahead. My issue is with building deep/multi-layer models out of Recurrent Graph Convolutional Layers. There are no examples of it in the repo (or anywhere else on the internet as far as I searched), so I might be doing something wrong. Here is my project. Now, what I observe when running this code is that RAM utilization goes up nearly exponentially with the number of RGC layers. Of course, most of it ends up in swap, making the training process too slow to be viable. This does not appear to be a memory leak, since most of the memory is not used by Python objects, but rather internally by PyTorch. Have you encountered this issue and is there a way to fix it?

    opened by funbotan 7
  • How to distribute the model to compute in multiple GPUs?

    How to distribute the model to compute in multiple GPUs?

    I am trying to distribute the model computation in multiple GPUs using DataParallel from Pytorch Geometric library I was trying to follow this example but I am running into errors. Is this the way to do it or should I look somewhere else? Are there any examples out there to distribute models from Pytorch Geometric Temporal library?

    opened by Adricu8 7
  • Combining multiple StaticGraphTemporalSignal objects into StaticGraphTemporalSignalBatch objects

    Combining multiple StaticGraphTemporalSignal objects into StaticGraphTemporalSignalBatch objects

    Hi,

    I've created a Dataset object which currently returns a single sequence (StaticGraphTemporalSignal) from a directory of many sequences. When feeding this to a DataLoader, I receive lists of length batch_size instead of batched objects. Is there a straightforward procedure of combining multiple StaticGraphTemporalSignal objects into a StaticGraphTemporalSignalBatch object? I have not found any examples of StaticGraphTemporalSignalBatch in use.

    Cheers.

    opened by petergroth 7
  • Putting multiple graphs in one StaticGraphTemporalSignal iterator

    Putting multiple graphs in one StaticGraphTemporalSignal iterator

    I'm dealing with a basketball players trajectory forecasting dataset; it is both temporal and spatial with the shape: [number of plays, number of timesteps, player, position]. Each play is composed of several timesteps, so in total I would have number of plays * number of timesteps graphs.

    From reading documentation and source code it seems that the StaticGraphTemporalSignal accepts multiple graphs, but I'm not sure how to do that. Moreover, I cannot create an instance of this iterator without passing target labels, which is not what I aim for in this project; unless I pass the target labels as the features of the next step in the prediction.

    I'm not sure if my question is clear I would be glad to elaborate, I require help :)

    opened by omarsinnno 7
  • Not all tests pass on GPU environment

    Not all tests pass on GPU environment

    Hi all, just thought I would let you know that not all your tests pass when running on a machine with a GPU

    I was looking at the MTGNN test which started working once I set the device to CPU and wasn't working with the existing code

    
       #device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        device = torch.device("cpu")
    

    =========================================================================== short test summary info ============================================================================ FAILED test/convolutional_test.py::test_astgcn - RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! FAILED test/convolutional_test.py::test_mstgcn - RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! FAILED test/convolutional_test.py::test_gman - RuntimeError: Expected object of device type cuda but got device type cpu for argument #1 'self' in call to _thnn_conv2d_forward =================================================================== 3 failed, 33 passed in 67.57s (0:01:07) ==================================================================== (pytorch_latest_p36) sh-4.2$

    opened by attibalazs 7
  • Feature request for Graph-Structure-Learning GNN for temporal Graph

    Feature request for Graph-Structure-Learning GNN for temporal Graph

    Is there a plan to include Graph-Structure-Learning graph neural network models for temporal graphs? A few models with github repos include MTGNN(https://github.com/nnzhan/MTGNN) and Graph-WaveNet (https://github.com/nnzhan/Graph-WaveNet)

    opened by seifer08ms 7
  • mtm_1 example and multiple graph/graph classification consultancy.

    mtm_1 example and multiple graph/graph classification consultancy.

    Hi torch geometric temporal :-)

    First, thanks for this awesome lib ! Secondly, I am working on person re-identification problem and hoped to use the temporal GNN's in order to tackle the problem. As in mtm_1, I am using MediaPipe in order to extract pose estimation of the persons in different datasets (I want to contribute this datasets to this repo once I will finish my Master's). Im am trying to do a graph classification, an to train in a batch using one of the two: AAGCN/TemporalGNN. I am working with batches that means that my data is as follow:

    1. node features: a tensor with a dimension of (batch, temporal dimension, number of nodes, node features).
    2. ground truth: a tensor containing the ground truth person id's with a dimension of: (batch, 1).
    3. edge index: since it is a static graph, this is a tensor of dimension: (2, num of connections).
    4. edge attribute: tensor with all ones vector, dim: (1, number of edges).

    I am trying to train a classifier with the following logic:

    1. passing a batch throw temporal GNN.
    2. do a global_mean_polling on the nodes dimension in order to extract graph representation.
    3. passing the embeddings through linear layer for n_class classification.
    4. use a loss on the prediction + embeddings.

    I am not able to get a good results and wanted to ask a few question.

    1. These models are able to be trained in batches?
    2. I am using the Data object from torch geometric in order to load the data, is it fit to temporal signal? (I mean, until now, I treated the Data object only as a data structure, and I didn't think it ha any affect on training).
    3. There is maybe an example of usage of the mtm_1 dataset?
    4. Am I working right with torch geometric temporal lib? since I am working with multiple graphs (for each individual), I hoped maybe yo can give me an example of how to work with multiple graphs.

    Thanks in advance for any answer/help, I hope to contribute my work at the end. I'll be able to share any further information/code upon request.

    Thanks!

    opened by asafjo23 0
  • Transpose weights bug in EvolveGCN

    Transpose weights bug in EvolveGCN

    I believe there is a bug in the following line.

    https://github.com/benedekrozemberczki/pytorch_geometric_temporal/blob/e43e95d726174574eeae32ad8c4670631fd0a58d/torch_geometric_temporal/nn/recurrent/evolvegcnh.py#L98

    The evolved W that comes from the GRU unit has the same shape as X which is (nodes, features). In the GConv layer, we are passing W and performing a multiplication [email protected] but we should be performing [email protected] for the shapes to match. It happens that here W is square (due to TopKPooling) which is why it might have been missed. Therefore, I believe we need to pass W.squeeze(dim=0).T. Same goes for the O-version of EvolveGCN.

    Could someone verify this please.

    Thank you.

    opened by euxhenh 0
  • [A3TGCN] This implementation is different with the original paper.

    [A3TGCN] This implementation is different with the original paper.

    This is a great geometric temporal framework. But there are issues when I read the source code of A3TGCN and A3TGCN2. I read the source code from this repository (based on PyTorch) and compared it with the original paper and original code (based on TensorFlow). Then I found that the attention modules were different in detail. For the original version, the context vector Ct was calculated using the MLP and the hidden states of T-GCN, and should be determined as follows: description of the attention module and the original source code: https://github.com/lehaifeng/T-GCN/blob/e21fb99a5c56fdf667a4ff7a9c8236761f7377f8/A3T-GCN/A3T-GCN.py#L90-L109

    But, this implementation just used the parameters self._attention to represent , as follows: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/blob/e43e95d726174574eeae32ad8c4670631fd0a58d/torch_geometric_temporal/nn/recurrent/attentiontemporalgcn.py#L49 https://github.com/benedekrozemberczki/pytorch_geometric_temporal/blob/e43e95d726174574eeae32ad8c4670631fd0a58d/torch_geometric_temporal/nn/recurrent/attentiontemporalgcn.py#L74 https://github.com/benedekrozemberczki/pytorch_geometric_temporal/blob/e43e95d726174574eeae32ad8c4670631fd0a58d/torch_geometric_temporal/nn/recurrent/attentiontemporalgcn.py#L76-L78

    Obviously, this is a modified version of A3TGCN, and the attention module has no relationship with the hidden state of the T-GCN module. In my opinion, this modification is significant, and should be marked in docs and related source code, or should be modified to be consistent with the original paper.

    Thanks sincerely for your dedication! Best!

    opened by Doradx 0
  • RecurrentGCN has no previous time characteristics

    RecurrentGCN has no previous time characteristics

    Each time the parameter is passed into the Recurrent GCN network, the value of hidden state H is always 0, and the time series characteristics of the previous time are not reflected in the second time series

    opened by czwangry123 1
  • dynamic node generation

    dynamic node generation

    Hello I have a model where I start from a single node - image and I want to progressively add nodes and edges, and in the end, evaluate the graph using the custom loss function. The features size will get progressively smaller and the node number bigger. I suppose in principle it should be possible in your framework, however, the decision to create a new node and a new connection is binary hence non-continuous hence nondifferentiable in nature how had you managed to enable gradient propagation in these conditions?

    Thank you for your answer!

    opened by jakubMitura14 2
  • TSAGCN test failed on GPU

    TSAGCN test failed on GPU

    When running the test, all tests passed except for

    test/attention_test.py:715:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    ../../../anaconda3/envs/pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py:1102: in _call_impl                                                                                                             
        return forward_call(*input, **kwargs)
    torch_geometric_temporal/nn/attention/tsagcn.py:339: in forward
        y = self.relu(self.tcn1(self.gcn1(x)) + self.residual(x))
    ../../../anaconda3/envs/pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py:1102: in _call_impl                                                                                                             
        return forward_call(*input, **kwargs)
    torch_geometric_temporal/nn/attention/tsagcn.py:262: in forward                                                                                                                                                        
        y = self._non_adaptive_forward(x, y)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    
    self = UnitGCN(                                                                                                                                                                                                      (conv_d): ModuleList(
        (0): Conv2d(100, 10, kernel_size=(1, 1), stride=(1, 1))                                                                                                                                                            (1): Conv2d(100, 10, ...ack_running_stats=True)
      (soft): Softmax(dim=-2)
      (tan): Tanh()
      (sigmoid): Sigmoid()
      (relu): ReLU(inplace=True)
    )
    x = tensor([[[[ 0.3476,  0.1290,  0.4463,  ...,  0.4613,  0.2014,  0.0761],                                                                                                                                                  [ 1.3476,  1.1290,  1.4463,  ...,  1...,  2.4257,  2.1628],                                                                                                                                                        [ 3.6332,  4.1489,  4.0730,  ...,  4.4859,  3.4257,  3.1628]]]],                                                                                                                                                device='cuda:0')
    y = None
    
        def _non_adaptive_forward(self, x, y):
            N, C, T, V = x.size()
            for i in range(self.num_subset):
                A1 = self.A[i]
                A2 = x.view(N, C * T, V)
    >           z = self.conv_d[i](torch.matmul(A2, A1).view(N, C, T, V))
    E           RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument mat2 in method wrapper_mm)
    
    torch_geometric_temporal/nn/attention/tsagcn.py:251: RuntimeError
    

    Similar to #46 , if I force it on CPU then it will pass

       #device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        device = torch.device("cpu")
    
    opened by BlueSkyLT 1
Releases(v0.54.0)
  • v0.54.0(Sep 4, 2022)

    What's Changed

    • Remove setup.py test (deprecated) by @jamesmyatt in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/182
    • Make tqdm an optional dependency by @jamesmyatt in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/188
    • Remove torch-scatter from mandatory dependencies by @jamesmyatt in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/191
    • Update installation instructions for PyTorch 1.11.0 and PyG latest by @jamesmyatt in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/192
    • Remove scipy from mandatory dependencies (not used) by @jamesmyatt in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/190
    • change on _set_hidden_state() by @h3dema in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/187

    New Contributors

    • @jamesmyatt made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/182
    • @h3dema made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/187

    Full Changelog: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/compare/v0.53.0...v0.54.0

    Source code(tar.gz)
    Source code(zip)
  • v0.53.0(Jul 12, 2022)

    What's Changed

    • remove unused parameters and variables for MPNNLSTM by @SherylHYX in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/154
    • Support for slicing signals by @gfngoncalves in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/160
    • Change dicts in hetero_gc_lstm to nn.ParameterDicts by @xunil17 in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/180
    • Optimize code to prevent repeated calls to convolution operator by @xunil17 in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/181

    New Contributors

    • @gfngoncalves made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/160
    • @xunil17 made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/180

    Full Changelog: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/compare/v0.52.0...v0.53.0

    Source code(tar.gz)
    Source code(zip)
  • v0.52.0(Apr 4, 2022)

    What's Changed

    • Hetero support by @doGregor in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/142
    • Fixed Montevideo Bus dataset by @dtortorella in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/147
    • Matrix multiplication bug fixed by @doGregor in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/148
    • Fixed lambda_max error when normalization != sym by @gravins in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/150

    New Contributors

    • @gravins made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/150

    Full Changelog: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/compare/v0.51.0...v0.52.0

    Source code(tar.gz)
    Source code(zip)
  • v0.51.0(Feb 10, 2022)

    What's Changed

    • Temporal signal split fix by @tforgaard in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/129
    • Refactor getitem by @josephenguehard in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/133
    • First commit for heterogeneous graph support by @doGregor in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/125
    • Fix an error in documentation for TGCN cell. by @BraveDistribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/136

    New Contributors

    • @tforgaard made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/129
    • @josephenguehard made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/133
    • @doGregor made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/125
    • @BraveDistribution made their first contribution in https://github.com/benedekrozemberczki/pytorch_geometric_temporal/pull/136

    Full Changelog: https://github.com/benedekrozemberczki/pytorch_geometric_temporal/compare/v0.50.0...v0.51.0

    Source code(tar.gz)
    Source code(zip)
  • v0.50.0(Jan 19, 2022)

  • v_00042(Dec 31, 2021)

    What's Changed

    • Feature extension: Additional named attributes in Signal/Batch objects by @Flunzmas 🤖
    • Fixed EvolveGCN weight squeezing by @dtortorella 🌃
    • Updated the A3TGCN_example by @poteman 🎇
    • Make attention trainable in A3TGCN and make it support batches by @elmahyai 🌄
    Source code(tar.gz)
    Source code(zip)
  • v_00041(Sep 11, 2021)

  • v_00040(Aug 4, 2021)

  • v_00039(Jul 25, 2021)

    • Added DNNTSP from Predicting Temporal Sets with Deep Neural Networks (KDD 2020).
    • Added tests for DNNTSP.
    • DNNTSP Docs.
    • Updated the README.md.
    Source code(tar.gz)
    Source code(zip)
  • v_00038(Jul 13, 2021)

    • LRGCN Case Study
    • A3TGCN Case Study
    • TGCN Case Study
    • DCRNN Case Study
    • GCLSTM Case Study
    • GConvGRU Case Study
    • GConvLSTM Case Study
    • AGCRN Case Study
    • MPNN LSTM Case Study
    • EvolveGCNO Case Study
    • EvolveGCNH Case Study
    Source code(tar.gz)
    Source code(zip)
  • v_0037(Jun 12, 2021)

  • v_00035(Jun 4, 2021)

  • v_00034(May 19, 2021)

  • v_00033(May 17, 2021)

  • v_00032(May 10, 2021)

  • v_00029(Apr 25, 2021)

  • v_00028(Apr 24, 2021)

  • v_00027(Apr 8, 2021)

  • v_00026(Apr 8, 2021)

  • v_00025(Mar 30, 2021)

  • v_00024(Mar 26, 2021)

  • v_00023(Mar 23, 2021)

  • v_00022(Mar 23, 2021)

  • v_00021(Mar 21, 2021)

  • v_00020(Mar 19, 2021)

  • v_00019(Mar 18, 2021)

  • v_00017(Mar 14, 2021)

  • v_00016(Mar 11, 2021)

  • v_00015(Mar 5, 2021)

Owner
Benedek Rozemberczki
PhD candidate at The University of Edinburgh @cdt-data-science working on machine learning and data mining related to graph structured data.
Benedek Rozemberczki
An official implementation of "Background-Aware Pooling and Noise-Aware Loss for Weakly-Supervised Semantic Segmentation" (CVPR 2021) in PyTorch.

BANA This is the implementation of the paper "Background-Aware Pooling and Noise-Aware Loss for Weakly-Supervised Semantic Segmentation". For more inf

CV Lab @ Yonsei University 59 Dec 12, 2022
Traductor de lengua de señas al español basado en Python con Opencv y MedaiPipe

Traductor de señas Traductor de lengua de señas al español basado en Python con Opencv y MedaiPipe Requerimientos 🔧 Python 3.8 o inferior para evitar

Jahaziel Hernandez Hoyos 3 Nov 12, 2022
The Surprising Effectiveness of Visual Odometry Techniques for Embodied PointGoal Navigation

PointNav-VO The Surprising Effectiveness of Visual Odometry Techniques for Embodied PointGoal Navigation Project Page | Paper Table of Contents Setup

Xiaoming Zhao 41 Dec 15, 2022
With this package, you can generate mixed-integer linear programming (MIP) models of trained artificial neural networks (ANNs) using the rectified linear unit (ReLU) activation function

With this package, you can generate mixed-integer linear programming (MIP) models of trained artificial neural networks (ANNs) using the rectified linear unit (ReLU) activation function. At the momen

ChemEngAI 40 Dec 27, 2022
Measure WWjj polarization fraction

WlWl Polarization Measure WWjj polarization fraction Paper: arXiv:2109.09924 Notice: This code can only be used for the inference process, if you want

4 Apr 10, 2022
Implementation of Basic Machine Learning Algorithms on small datasets using Scikit Learn.

Basic Machine Learning Algorithms All the basic Machine Learning Algorithms are implemented in Python using libraries Acknowledgements Machine Learnin

Piyal Banik 47 Oct 16, 2022
Tensorflow 2 Object Detection API kurulumu, GPU desteği, custom model hazırlama

Tensorflow 2 Object Detection API Bu tutorial, TensorFlow 2.x'in kararlı sürümü olan TensorFlow 2.3'ye yöneliktir. Bu, görüntülerde / videoda nesne a

46 Nov 20, 2022
Simulations for Turring patterns on an apically expanding domain. T

Turing patterns on expanding domain Simulations for Turring patterns on an apically expanding domain. The details about the models and numerical imple

Yue Liu 0 Aug 03, 2021
Pmapper is a super-resolution and deconvolution toolkit for python 3.6+

pmapper pmapper is a super-resolution and deconvolution toolkit for python 3.6+. PMAP stands for Poisson Maximum A-Posteriori, a highly flexible and a

NASA Jet Propulsion Laboratory 8 Nov 06, 2022
Few-Shot Graph Learning for Molecular Property Prediction

Few-shot Graph Learning for Molecular Property Prediction Introduction This is the source code and dataset for the following paper: Few-shot Graph Lea

Zhichun Guo 94 Dec 12, 2022
"Reinforcement Learning for Bandit Neural Machine Translation with Simulated Human Feedback"

This is code repo for our EMNLP 2017 paper "Reinforcement Learning for Bandit Neural Machine Translation with Simulated Human Feedback", which implements the A2C algorithm on top of a neural encoder-

Khanh Nguyen 131 Oct 21, 2022
Python parser for DTED data.

DTED Parser This is a package written in pure python (with help from numpy) to parse and investigate Digital Terrain Elevation Data (DTED) files. This

Ben Bonenfant 12 Dec 18, 2022
Face recognition. Redefined.

FaceFinder Use a powerful CNN to identify faces in images! TABLE OF CONTENTS About The Project Built With Getting Started Prerequisites Installation U

BleepLogger 20 Jun 16, 2021
Image-to-Image Translation with Conditional Adversarial Networks (Pix2pix) implementation in keras

pix2pix-keras Pix2pix implementation in keras. Original paper: Image-to-Image Translation with Conditional Adversarial Networks (pix2pix) Paper Author

William Falcon 141 Dec 30, 2022
kullanışlı ve işinizi kolaylaştıracak bir araç

Hey merhaba! işte çok sorulan sorularının cevabı ve sorunlarının çözümü; Soru= İçinde var denilen birçok şeyi göremiyorum bunun sebebi nedir? Cevap= B

Sexettin 16 Dec 17, 2022
Official Python implementation of the 'Sparse deconvolution'-v0.3.0

Sparse deconvolution Python v0.3.0 Official Python implementation of the 'Sparse deconvolution', and the CPU (NumPy) and GPU (CuPy) calculation backen

Weisong Zhao 23 Dec 28, 2022
Deep Video Matting via Spatio-Temporal Alignment and Aggregation [CVPR2021]

Deep Video Matting via Spatio-Temporal Alignment and Aggregation [CVPR2021] Paper: https://arxiv.org/abs/2104.11208 Introduction Despite the significa

76 Dec 07, 2022
some academic posters as references. May we have in-person poster session soon!

some academic posters as references. May we have in-person poster session soon!

Bolei Zhou 472 Jan 06, 2023
Implementation of TabTransformer, attention network for tabular data, in Pytorch

Tab Transformer Implementation of Tab Transformer, attention network for tabular data, in Pytorch. This simple architecture came within a hair's bread

Phil Wang 420 Jan 05, 2023
GeneDisco is a benchmark suite for evaluating active learning algorithms for experimental design in drug discovery.

GeneDisco is a benchmark suite for evaluating active learning algorithms for experimental design in drug discovery.

22 Dec 12, 2022