门控图神经网络(GGNN)及代码分析
门控图神经网络GGNN及代码分析
基本概念
GGNN是一种基于GRU的经典的空间域message passing的模型
问题描述
一个图 G = (V, E), 节点v ∈ V中存储D维向量,边e ∈ E中存储D × D维矩阵, 目的是构建网络GGNN。
实现每一次参数更新时,每个节点既接受相邻节点的信息,又向相邻节点发送信息。
主要贡献
基于GRU提出了GGNN,利用RNN类似原理实现了信息在graph中的传递。
传播模型
输出模型
来源论文
Gated Graph Sequence Neural Networks,ICLR 2016
链接:https://arxiv.org/abs/1511.05493
官方实现(Lua):https://github.com/yujiali/ggnn
第三方实现(pytorch):https://github.com/calebmah/ggnn.pytorch
GRU概念详见:https://blog.csdn.net/lthirdonel/article/details/88945257
代码分析
只看论文确实让人觉得玄学,特别是annotation部分,很迷
结合代码来看就好很多,这里例举的是@JamesChuanggg的pytorch实现ggnn.pytorch,这个实现的代码相比于官方版本来说,容易读很多
1.annotation
annotation = np.zeros([n_nodes, n_annotation_dim])
annotation[target[1]-1][0] = 1
核心实现就是上面这个,除了表达到达关系部分用了1,其他padding成了0
2.每一个时间步的实现
class Propogator(nn.Module):"""Gated Propogator for GGNNUsing LSTM gating mechanism"""def __init__(self, state_dim, n_node, n_edge_types):## 初始化参照源代码def forward(self, state_in, state_out, state_cur, A):# 入边向量和出边向量A_in = A[:, :, :self.n_node*self.n_edge_types]A_out = A[:, :, self.n_node*self.n_edge_types:]# 入边向量和出边向量分别和图做计算a_in = torch.bmm(A_in, state_in)a_out = torch.bmm(A_out, state_out)a = torch.cat((a_in, a_out, state_cur), 2)# 类GRU部分r = self.reset_gate(a)z = self.update_gate(a)joined_input = torch.cat((a_in, a_out, r * state_cur), 2)h_hat = self.tansform(joined_input)output = (1 - z) * state_cur + z * h_hatreturn output
3.网络结构
class GGNN(nn.Module):"""Gated Graph Sequence Neural Networks (GGNN)Mode: SelectNodeImplementation based on https://arxiv.org/abs/1511.05493"""def __init__(self, opt):# 初始化参考源代码def forward(self, prop_state, annotation, A):# prop_state:论文中的h# annotation:节点标注# A:图for i_step in range(self.n_steps):# 对于每一个时间步循环in_states = []out_states = []for i in range(self.n_edge_types):# 对输入特征做两个分支的全连接,得到入边特征,和出边特征# 每一种边都要计算一次in_states.append(self.in_fcs[i](prop_state))out_states.append(self.out_fcs[i](prop_state))# 将所有种类的边得到的特征连接起来in_states = torch.stack(in_states).transpose(0, 1).contiguous()in_states = in_states.view(-1, self.n_node*self.n_edge_types, self.state_dim)out_states = torch.stack(out_states).transpose(0, 1).contiguous()out_states = out_states.view(-1, self.n_node*self.n_edge_types, self.state_dim)# 用门控图模块更新hprop_state = self.propogator(in_states, out_states, prop_state, A)join_state = torch.cat((prop_state, annotation), 2)output = self.out(join_state)output = output.sum(2)return output
门控图神经网络(GGNN)及代码分析相关推荐
- 门控图神经网络及PyTorch实现
门控图神经网络及PyTorch实现 前言 GNN预备知识 面对一大串公式不得不说的定理 *巴拿赫不动点定理* GNN信息传播特点--可达性任务展示 具体实现 *隐藏状态的计算* *GNN网络框架* * ...
- 材料科学中的数据挖掘:晶体图神经网络解读与代码解析
©PaperWeekly 原创 · 作者|张玮玮 学校|东北大学硕士 研究方向|情绪识别 论文标题: Crystal Graph Neural Networks for Data Mining in ...
- 深度学习基础技术分析2:神经网络(含代码分析)
1. 模型图示 感知机仅能解决线性的问题,这个局限性使得其无法适应多数的实际应用.因此人们提出了神经网络.如图2.1所示. 图2.1 神经网络 2. 相关技术 技术2.1 隐藏层 从结构上看,神经网络 ...
- 同构和异构经典图神经网络汇总+pytorch代码
收集一些讲解比较好的博客或者知乎文档,以及对应的代码 1.同构图神经网络-GCN/GAT/GraphSAGE 图卷积:从GCN到GAT.GraphSAGE图卷积:从GCN到GAT.GraphSAGE ...
- BP神经网络实例及代码分析(python+tensorflow实现)
代码功能:对山东某地区历史温度数据进行BP神经网络训练,通过前三小时温度数据,预测第四小时温度值. 数据来源:2016年4月份山东某地区温度数据,共30*24小时.1日到20日(20*24小时)数据为 ...
- 图神经网络学习记录:《图神经网络综述:模型与应用》
Graph Neural Networks: A Review of Methods and Applications 摘要:大 ...
- Paper:《Graph Neural Networks: A Review of Methods and Applications—图神经网络:方法与应用综述》翻译与解读
Paper:<Graph Neural Networks: A Review of Methods and Applications-图神经网络:方法与应用综述>翻译与解读 目录 < ...
- 收藏|图神经网络综述
来源:人工智能AI技术 本文约12000字,建议阅读10+分钟 本文为你简述图计算.图数据库.知识图谱.图神经网络等图技术领域的相关历史及不同类型的图结构. 在科学研究中,从方法论上来讲,都应&quo ...
- 【综述专栏】图神经网络综述
来源:图灵人工智能 作者:王健宗等 https://wwwihcm/people/euu-lin-jun-7 原文链接: https://kns.cnki.net/kcms/detail/31.128 ...
最新文章
- 为什么要强制弃坑Fastjson而主推Jackson?
- spring security之httpSecurity使用示例
- GIS创新实践【实验1】郑州市地图制作与发布
- 解决:EXCEL复制粘贴,精度丢失
- 实例变量和静态变量(或类变量static)
- 用URLGather来管理和保存你的页面
- SQL 查询横表变竖表
- 细数开源历史上的十个重大事件
- 脚本安装Rocky版OpenStack 1控制节点+1计算节点环境部署
- ORA-01157: cannot identify/lock data file处理
- Python doc转docx
- python RTL自动生成_用Python自动生成快闪文字视频
- iphone图片编辑画笔_苹果手机截屏后怎么编辑,这么实用你可一定要知道
- [转]用python来开发webgame服务端(3)
- 新手小白学JAVA-显示系统中文件的后缀名
- 二、AFD-Net: Aggregated Feature Difference Learning for Cross-Spectral Image Patch Matching论文阅读
- 使用RssHub为网页生成RSS订阅源
- 闰年,闰月对应的天数快速记忆法
- Classic Shell不起作用(失效)的解决
- Hexo+Github实现相册功能