PyTorch Geometric Temporal 介绍 —— 数据结构和RGCN的概念
Introduction
PyTorch Geometric Temporal is a temporal graph neural network extension library for PyTorch Geometric.
PyTorch Geometric Temporal 是基于PyTorch Geometric的对时间序列图数据的扩展。
Data Structures: PyTorch Geometric Temporal Signal
定义:在PyTorch Geometric Temporal中,边、边特征、节点被归为图结构Graph,节点特征被归为信号Single,对于特定时间切片或特定时间点的时间序列图数据被称为快照Snapshot。
PyTorch Geometric Temporal定义了数个Temporal Signal Iterators用于时间序列图数据的迭代。
Temporal Signal Iterators数据迭代器的参数是由描述图的各个对象(edge_index,node_feature,...)的列表组成,列表的索引对应各时间节点。
按照图结构的时间序列中的变换部分不同,图结构包括但不限于为以下几种:
- Static Graph with Temporal Signal
静态的边和边特征,静态的节点,动态的节点特征 - Dynamic Graph with Temporal Signal
动态的边和边特征,动态的节点和节点特征 - Dynamic Graph with Static Signal
动态的边和边特征,动态的节点,静态的节点特征
理论上来说,任意描述图结构的对象都可以根据问题定为静态或动态,所有对象都为静态则为传统的GNN问题。
实际上,在PyTorch Geometric Temporal定义的数据迭代器中,静态和动态的差别在于是以数组的列表还是以单一数组的形式输入,以及在输出时是按索引从列表中读取还是重复读取单一数组。
如在StaticGraphTemporalSignal的源码中_get_edge_index和 _get_features分别为:
# https://pytorch-geometric-temporal.readthedocs.io/en/latest/_modules/torch_geometric_temporal/signal/static_graph_temporal_signal.html#StaticGraphTemporalSignal
def _get_edge_index(self):
if self.edge_index is None:
return self.edge_index
else:
return torch.LongTensor(self.edge_index)
def _get_features(self, time_index: int):
if self.features[time_index] is None:
return self.features[time_index]
else:
return torch.FloatTensor(self.features[time_index])
对于Heterogeneous Graph的数据迭代器,其与普通Graph的差异在于对于每个类别建立键值对组成字典,其中的值按静态和动态定为列表或单一数组。
Recurrent Graph Convolutional Layers
Define $\ast_G $ as graph convolution, \(\odot\) as Hadamard product
&z = \sigma(W_{xz}\ast_Gx_t+W_{hz}\ast_Gh_{t-1}),\\
&r = \sigma(W_{xr}\ast_Gx_t+W_{hr}\ast_Gh_{t-1}),\\
&\tilde h = \text{tanh}(W_{xh}\ast_Gx_t+W_{hh}\ast_G(r\odot h_{t-1})),\\
&h_t = z \odot h_{t-1} + (1-z) \odot \tilde h
\end{aligned}
\]
具体的函数实现见 https://pytorch-geometric-temporal.readthedocs.io/en/latest/modules/root.html#
与RNN的比较
&z_t = \sigma(W_{xz}x_t+b_{xz}+W_{hz}h_{t-1}+b_{hz}),\\
&r_t = \sigma(W_{xr}x_t+b_{xr}+W_{hr}h_{t-1}+b_{hr}),\\
&\tilde h_t = \text{tanh}(W_{xh}x_t+b_{xh}+r_t(W_{hh}h_{t-1}+b_{hh})),\\
&h_t = z*h_{t-1} + (1-z)*\tilde h
\end{aligned}
\]
From https://pytorch.org/docs/stable/generated/torch.nn.GRU.html#torch.nn.GRU
对于传统GRU的解析 https://zhuanlan.zhihu.com/p/32481747
在普通数据的Recurrent NN中,对于每一条时间序列数据会独立的计算各时间节点会根据上一时间节点计算hidden state。但在时间序列图数据中,每个snapshot被视为一个整体计算Hidden state matrix \(H \in \mathbb{R}^{\text{Num(Nodes)}\times \text{Out_Channels}_H}\) 和Cell state matrix(对于LSTM)\(C \in \mathbb{R}^{\text{Num(Nodes)}\times \text{Out_Channels}_C}\)。
与GCN的比较
相较于传统的Graph Convolution Layer,RGCN将图卷积计算的扩展到RNN各个状态的计算中替代原本的参数矩阵和特征的乘法计算。
PyTorch Geometric Temporal 介绍 —— 数据结构和RGCN的概念的更多相关文章
- 图神经网络 PyTorch Geometric 入门教程
简介 Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域.近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN ...
- 如何入门Pytorch之一:Pytorch基本知识介绍
前言 PyTorch和Tensorflow是目前最为火热的两大深度学习框架,Tensorflow主要用户群在于工业界,而PyTorch主要用户分布在学术界.目前视觉三大顶会的论文大多都是基于PyTor ...
- 【小白学PyTorch】9 tensor数据结构与存储结构
文章来自微信公众号[机器学习炼丹术]. 上一节课,讲解了MNIST图像分类的一个小实战,现在我们继续深入学习一下pytorch的一些有的没的的小知识来作为只是储备. 参考目录: @ 目录 1 pyto ...
- 【PHP数据结构】图的概念和存储结构
随着学习的深入,我们的知识也在不断的扩展丰富.树结构有没有让大家蒙圈呢?相信我,学完图以后你就会觉得二叉树简直是简单得没法说了.其实我们说所的树,也是图的一种特殊形式. 图的概念 还记得我们学习树的第 ...
- GCD介绍(一): 基本概念和Dispatch Queue
什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许 ...
- 0.数据结构(python语言) 基本概念 算法的代价及度量!!!
先看思维导图: *思维导图有点简陋,本着循循渐进的思想,这小节的知识大多只做了解即可. *重点在于算法的代价及度量!!!查找资料务必弄清楚. 零.四个基本概念 问题:一个具体的需求 问题实例:针对问题 ...
- Pandas 数据结构Dataframe:基本概念及创建
"二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值.字符串.布尔值等. Dataframe中的数据以一个或多个二维块存放,不是列表.字 ...
- 【数据结构&算法】08-栈概念&源码
目录 前言 栈的定义 定义 常见应用 栈的常见应用 进栈出栈变化形式 栈的抽象数据类型 栈的顺序存储结构及实现 栈的顺序存储结构 顺序栈 顺序栈的结构定义 两栈共享空间 栈的链式存储结构及实现 栈的链 ...
- 【转】简单了介绍js中的一些概念(词法结构) 和 数据类型(部分)。
1 , javascript字符集: javascript采用的是Unicode字符集编码. 为什么要采用这个编码呢? 原因很简单,16位的Unicode编码可以表示地球人的任何书面语言.这是语言 国 ...
- 第4节 Scala中的actor介绍:1、actor概念介绍;2、actor执行顺序和发送消息的方式
10. Scala Actor并发编程 10.1. 课程目标 10.1.1. 目标一:熟悉Scala Actor并发编程 10.1.2. 目标二:为学习Akka做准备 注:Sca ...
随机推荐
- 华南理工大学 Python第1章课后小测
1.(单选)计算机有两个基本特性:功能性和()性.(本题分数:5)A) 可存储B) 可计算C) 可通信D) 可编程您的答案:D 正确率:100%2.(单选)计算机硬件可以直接识别和执行的程序设计语言 ...
- 使用C#编写一个.NET分析器(一)
译者注 这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断).IDE.诊断 ...
- [Python]-pandas模块-CSV文件读写
Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...
- Hadoop阶段学习总结
第一部分:HDFS相关问题 一.描述一下HDFS的数据写入流程 首先由客户端想NameNode服务发起写数据请求,NameNode接收到请求后会进行基本验证,验证内容包括对请求上传的路径进行合法验 ...
- Lua脚本在Redis事务中的应用实践
使用过Redis事务的应该清楚,Redis事务实现是通过打包多条命令,单独的隔离操作,事务中的所有命令都会按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断.事务中的命令要么全部 ...
- Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容
使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...
- 单台主机MySQL多实例部署
二进制安装mysql-5.7.26 [root@mysql ~]# cd /server/tools/ [root@mysql tools]# ll total 629756 -rw-r--r-- 1 ...
- Elasticsearch:Node 介绍 - 7.9 之后版本
文章转载自:https://elasticstack.blog.csdn.net/article/details/110947372 在 Elastic Stack 7.9 之后的发布中,我们可以直接 ...
- 字符串反码A
while True: try: string=input() if string!="!": res="" for i in string: if i.isu ...
- Pjax 下动态加载插件方案
在纯静态网站里,有时候会动态更新某个区域往会选择 Pjax(swup.barba.js)去处理,他们都是使用 ajax 和 pushState 通过真正的永久链接,页面标题和后退按钮提供快速浏览体验. ...