门控图神经网络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)及代码分析相关推荐

  1. 门控图神经网络及PyTorch实现

    门控图神经网络及PyTorch实现 前言 GNN预备知识 面对一大串公式不得不说的定理 *巴拿赫不动点定理* GNN信息传播特点--可达性任务展示 具体实现 *隐藏状态的计算* *GNN网络框架* * ...

  2. 材料科学中的数据挖掘:晶体图神经网络解读与代码解析

    ©PaperWeekly 原创 · 作者|张玮玮 学校|东北大学硕士 研究方向|情绪识别 论文标题: Crystal Graph Neural Networks for Data Mining in ...

  3. 深度学习基础技术分析2:神经网络(含代码分析)

    1. 模型图示 感知机仅能解决线性的问题,这个局限性使得其无法适应多数的实际应用.因此人们提出了神经网络.如图2.1所示. 图2.1 神经网络 2. 相关技术 技术2.1 隐藏层 从结构上看,神经网络 ...

  4. 同构和异构经典图神经网络汇总+pytorch代码

    收集一些讲解比较好的博客或者知乎文档,以及对应的代码 1.同构图神经网络-GCN/GAT/GraphSAGE 图卷积:从GCN到GAT.GraphSAGE图卷积:从GCN到GAT.GraphSAGE ...

  5. BP神经网络实例及代码分析(python+tensorflow实现)

    代码功能:对山东某地区历史温度数据进行BP神经网络训练,通过前三小时温度数据,预测第四小时温度值. 数据来源:2016年4月份山东某地区温度数据,共30*24小时.1日到20日(20*24小时)数据为 ...

  6. 图神经网络学习记录:《图神经网络综述:模型与应用》

                                        Graph Neural Networks: A Review of Methods and Applications 摘要:大 ...

  7. Paper:《Graph Neural Networks: A Review of Methods and Applications—图神经网络:方法与应用综述》翻译与解读

    Paper:<Graph Neural Networks: A Review of Methods and Applications-图神经网络:方法与应用综述>翻译与解读 目录 < ...

  8. 收藏|图神经网络综述

    来源:人工智能AI技术 本文约12000字,建议阅读10+分钟 本文为你简述图计算.图数据库.知识图谱.图神经网络等图技术领域的相关历史及不同类型的图结构. 在科学研究中,从方法论上来讲,都应&quo ...

  9. 【综述专栏】图神经网络综述

    来源:图灵人工智能 作者:王健宗等 https://wwwihcm/people/euu-lin-jun-7 原文链接: https://kns.cnki.net/kcms/detail/31.128 ...

最新文章

  1. 为什么要强制弃坑Fastjson而主推Jackson?
  2. spring security之httpSecurity使用示例
  3. GIS创新实践【实验1】郑州市地图制作与发布
  4. 解决:EXCEL复制粘贴,精度丢失
  5. 实例变量和静态变量(或类变量static)
  6. 用URLGather来管理和保存你的页面
  7. SQL 查询横表变竖表
  8. 细数开源历史上的十个重大事件
  9. 脚本安装Rocky版OpenStack 1控制节点+1计算节点环境部署
  10. ORA-01157: cannot identify/lock data file处理
  11. Python doc转docx
  12. python RTL自动生成_用Python自动生成快闪文字视频
  13. iphone图片编辑画笔_苹果手机截屏后怎么编辑,这么实用你可一定要知道
  14. [转]用python来开发webgame服务端(3)
  15. 新手小白学JAVA-显示系统中文件的后缀名
  16. 二、AFD-Net: Aggregated Feature Difference Learning for Cross-Spectral Image Patch Matching论文阅读
  17. 使用RssHub为网页生成RSS订阅源
  18. 闰年,闰月对应的天数快速记忆法
  19. Classic Shell不起作用(失效)的解决
  20. Hexo+Github实现相册功能

热门文章

  1. html图片从透明到显示,css 文字半透明显示在图片上
  2. linux下创建二进制文件并修改
  3. 算法-详解堆排序算法
  4. 高数:第五章(同济大学第七版)
  5. 中企动力:地方门户网站运营之推广经验分享
  6. MongoDB下载安装与测试连接(windows)
  7. 迪文DWIN串口屏的使用经验分享
  8. Hive WebUi安装使用
  9. 华为是怎么研发的(17)——组织氛围
  10. React-hooks-ts-antd项目 使用阿里图标库中的图标