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
Dynamic Environments with Deformable Objects (DEDO)

DEDO - Dynamic Environments with Deformable Objects DEDO is a lightweight and customizable suite of environments with deformable objects. It is aimed

Rika 32 Dec 22, 2022
Pytorch implementation of Hinton's Dynamic Routing Between Capsules

pytorch-capsule A Pytorch implementation of Hinton's "Dynamic Routing Between Capsules". https://arxiv.org/pdf/1710.09829.pdf Thanks to @naturomics fo

Tim Omernick 625 Oct 27, 2022
A Comparative Framework for Multimodal Recommender Systems

Cornac Cornac is a comparative framework for multimodal recommender systems. It focuses on making it convenient to work with models leveraging auxilia

Preferred.AI 671 Jan 03, 2023
An unofficial PyTorch implementation of a federated learning algorithm, FedAvg.

Federated Averaging (FedAvg) in PyTorch An unofficial implementation of FederatedAveraging (or FedAvg) algorithm proposed in the paper Communication-E

Seok-Ju Hahn 123 Jan 06, 2023
Tensorflow Implementation of Pixel Transposed Convolutional Networks (PixelTCN and PixelTCL)

Pixel Transposed Convolutional Networks Created by Hongyang Gao, Hao Yuan, Zhengyang Wang and Shuiwang Ji at Texas A&M University. Introduction Pixel

Hongyang Gao 95 Jul 24, 2022
Apply our monocular depth boosting to your own network!

MergeNet - Boost Your Own Depth Boost custom or edited monocular depth maps using MergeNet Input Original result After manual editing of base You can

Computational Photography Lab @ SFU 142 Dec 17, 2022
Image-based Navigation in Real-World Environments via Multiple Mid-level Representations: Fusion Models Benchmark and Efficient Evaluation

Image-based Navigation in Real-World Environments via Multiple Mid-level Representations: Fusion Models Benchmark and Efficient Evaluation This reposi

First Person Vision @ Image Processing Laboratory - University of Catania 1 Aug 21, 2022
Stable Neural ODE with Lyapunov-Stable Equilibrium Points for Defending Against Adversarial Attacks

Stable Neural ODE with Lyapunov-Stable Equilibrium Points for Defending Against Adversarial Attacks Stable Neural ODE with Lyapunov-Stable Equilibrium

Kang Qiyu 8 Dec 12, 2022
ContourletNet: A Generalized Rain Removal Architecture Using Multi-Direction Hierarchical Representation

ContourletNet: A Generalized Rain Removal Architecture Using Multi-Direction Hierarchical Representation (Accepted by BMVC'21) Abstract: Images acquir

10 Dec 08, 2022
Code of paper "CDFI: Compression-Driven Network Design for Frame Interpolation", CVPR 2021

CDFI (Compression-Driven-Frame-Interpolation) [Paper] (Coming soon...) | [arXiv] Tianyu Ding*, Luming Liang*, Zhihui Zhu, Ilya Zharkov IEEE Conference

Tianyu Ding 95 Dec 04, 2022
List of content farm sites like g.penzai.com.

内容农场网站清单 Google 中文搜索结果包含了相当一部分的内容农场式条目,比如「小 X 知识网」「小 X 百科网」。此种链接常会 302 重定向其主站,页面内容为自动生成,大量堆叠关键字,揉杂一些爬取到的内容,完全不具可读性和参考价值。 尤为过分的是,该类网站可能有成千上万个分身域名被 Goog

WDMPA 541 Jan 03, 2023
Web service for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation based on OpenFace 2.0

OpenGaze: Web Service for OpenFace Facial Behaviour Analysis Toolkit Overview OpenFace is a fantastic tool intended for computer vision and machine le

Sayom Shakib 4 Nov 03, 2022
This repository contains the code and models necessary to replicate the results of paper: How to Robustify Black-Box ML Models? A Zeroth-Order Optimization Perspective

Black-Box-Defense This repository contains the code and models necessary to replicate the results of our recent paper: How to Robustify Black-Box ML M

OPTML Group 2 Oct 05, 2022
DataCLUE: 国内首个以数据为中心的AI测评(含模型分析报告)

DataCLUE: A Benchmark Suite for Data-centric NLP You can get the english version of README. 以数据为中心的AI测评(DataCLUE) 内容导引 章节 描述 简介 介绍以数据为中心的AI测评(DataCLUE

CLUE benchmark 135 Dec 22, 2022
Re-TACRED: Addressing Shortcomings of the TACRED Dataset

Re-TACRED Re-TACRED: Addressing Shortcomings of the TACRED Dataset

George Stoica 40 Dec 10, 2022
Focal and Global Knowledge Distillation for Detectors

FGD Paper: Focal and Global Knowledge Distillation for Detectors Install MMDetection and MS COCO2017 Our codes are based on MMDetection. Please follow

Mesopotamia 261 Dec 23, 2022
Add gui for YoloV5 using PyQt5

HEAD 更新2021.08.16 **添加图片和视频保存功能: 1.图片和视频按照当前系统时间进行命名 2.各自检测结果存放入output文件夹 3.摄像头检测的默认设备序号更改为0,减少调试报错 温馨提示: 1.项目放置在全英文路径下,防止项目报错 2.默认使用cpu进行检测,自

Ruihao Wang 65 Dec 27, 2022
Pytorch implementation of OCNet series and SegFix.

openseg.pytorch News 2021/09/14 MMSegmentation has supported our ISANet and refer to ISANet for more details. 2021/08/13 We have released the implemen

openseg-group 1.1k Dec 23, 2022
A hue shift helper for OBS

obs-hue-shift A hue shift helper for OBS This is a repo based on the really nice script Hegemege made. The original script can be found https://gist.g

Alexis Tyler 1 Jan 10, 2022
Prml - Repository of notes, code and notebooks in Python for the book Pattern Recognition and Machine Learning by Christopher Bishop

Pattern Recognition and Machine Learning (PRML) This project contains Jupyter notebooks of many the algorithms presented in Christopher Bishop's Patte

Gerardo Durán-Martín 1k Jan 07, 2023