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 X@W 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
CVPR2021: Temporal Context Aggregation Network for Temporal Action Proposal Refinement

Temporal Context Aggregation Network - Pytorch This repo holds the pytorch-version codes of paper: "Temporal Context Aggregation Network for Temporal

Zhiwu Qing 63 Sep 27, 2022
Implementation of temporal pooling methods studied in [ICIP'20] A Comparative Evaluation Of Temporal Pooling Methods For Blind Video Quality Assessment

Implementation of temporal pooling methods studied in [ICIP'20] A Comparative Evaluation Of Temporal Pooling Methods For Blind Video Quality Assessment

Zhengzhong Tu 5 Sep 16, 2022
Cascaded Deep Video Deblurring Using Temporal Sharpness Prior and Non-local Spatial-Temporal Similarity

This repository is the official PyTorch implementation of Cascaded Deep Video Deblurring Using Temporal Sharpness Prior and Non-local Spatial-Temporal Similarity

hippopmonkey 4 Dec 11, 2022
Implementation of Geometric Vector Perceptron, a simple circuit for 3d rotation equivariance for learning over large biomolecules, in Pytorch. Idea proposed and accepted at ICLR 2021

Geometric Vector Perceptron Implementation of Geometric Vector Perceptron, a simple circuit with 3d rotation equivariance for learning over large biom

Phil Wang 59 Nov 24, 2022
A PyTorch implementation of "DGC-Net: Dense Geometric Correspondence Network"

DGC-Net: Dense Geometric Correspondence Network This is a PyTorch implementation of our work "DGC-Net: Dense Geometric Correspondence Network" TL;DR A

null 191 Dec 16, 2022
Pytorch Geometric Tutorials

Pytorch Geometric Tutorials

Antonio Longa 648 Jan 8, 2023
Multi-Scale Geometric Consistency Guided Multi-View Stereo

ACMM [News] The code for ACMH is released!!! [News] The code for ACMP is released!!! About ACMM is a multi-scale geometric consistency guided multi-vi

Qingshan Xu 118 Jan 4, 2023
Code for "FGR: Frustum-Aware Geometric Reasoning for Weakly Supervised 3D Vehicle Detection", ICRA 2021

FGR This repository contains the python implementation for paper "FGR: Frustum-Aware Geometric Reasoning for Weakly Supervised 3D Vehicle Detection"(I

Yi Wei 31 Dec 8, 2022
Geometric Vector Perceptron --- a rotation-equivariant GNN for learning from biomolecular structure

Geometric Vector Perceptron Code to accompany Learning from Protein Structure with Geometric Vector Perceptrons by B Jing, S Eismann, P Suriana, RJL T

Dror Lab 85 Dec 29, 2022
Certifiable Outlier-Robust Geometric Perception

Certifiable Outlier-Robust Geometric Perception About This repository holds the implementation for certifiably solving outlier-robust geometric percep

null 83 Dec 31, 2022
A geometric deep learning pipeline for predicting protein interface contacts.

A geometric deep learning pipeline for predicting protein interface contacts.

null 44 Dec 30, 2022
3DMV jointly combines RGB color and geometric information to perform 3D semantic segmentation of RGB-D scans.

3DMV 3DMV jointly combines RGB color and geometric information to perform 3D semantic segmentation of RGB-D scans. This work is based on our ECCV'18 p

Владислав Молодцов 0 Feb 6, 2022
Code for "SRHEN: Stepwise-Refining Homography Estimation Network via Parsing Geometric Correspondences in Deep Latent Space"

SRHEN This is a better and simpler implementation for "SRHEN: Stepwise-Refining Homography Estimation Network via Parsing Geometric Correspondences in

null 1 Oct 28, 2022
Geometric Algebra package for JAX

JAXGA - JAX Geometric Algebra GitHub | Docs JAXGA is a Geometric Algebra package on top of JAX. It can handle high dimensional algebras by storing onl

Robin Kahlow 36 Dec 22, 2022
Geometric Vector Perceptrons --- a rotation-equivariant GNN for learning from biomolecular structure

Geometric Vector Perceptron Implementation of equivariant GVP-GNNs as described in Learning from Protein Structure with Geometric Vector Perceptrons b

Dror Lab 142 Dec 29, 2022
Computational modelling of ray propagation through optical elements using the principles of geometric optics (Ray Tracer)

Computational modelling of ray propagation through optical elements using the principles of geometric optics (Ray Tracer) Introduction By applying the

Son Gyo Jung 1 Jul 9, 2022
GeoTransformer - Geometric Transformer for Fast and Robust Point Cloud Registration

Geometric Transformer for Fast and Robust Point Cloud Registration PyTorch imple

Zheng Qin 220 Jan 5, 2023
Buffon’s needle: one of the oldest problems in geometric probability

Buffon-s-Needle Buffon’s needle is one of the oldest problems in geometric proba

null 3 Feb 18, 2022
Contains code for Deep Kernelized Dense Geometric Matching

DKM - Deep Kernelized Dense Geometric Matching Contains code for Deep Kernelized Dense Geometric Matching We provide pretrained models and code for ev

Johan Edstedt 83 Dec 23, 2022