GAT解读graph attention network
作为图模型的基本结构,有必要详细了解下GAT结构,GAT基本结构堆叠后组成类似于DNN的结构,进行特征提取,整体结构如下:Q group277356808 GAT paper地址
1,输入是N个节点的embedding,输出也是N个节点的embedding;
2,参数化的权重W应用于每个节点,W是共享的;
3,然后进行self-attention,得到j对i的attention系数:
,a是共享的attention机制,单层feedforward neural network
4,进行masked attention,引入graph结构,仅仅计算i的邻居的attention系数,并进行softmax归一化:在i的邻居内进行归一化
5,具体使用中参数化权重a可以是,并增加LeakyReLu(倾斜度alpha=0.2)
如下所示:
左图是计算公式的含义,右图是多头attention(3个头,3种颜色的箭头) ,1的邻居包括他自己,进行了6次attention系数计算,然后concat后或者avg后得到1的最新表达。
在计算中逐个节点计算attention系数,并得到每个节点的最新表达。
【插入】退出Mac vim编辑的方法:esc后,qw,ZZ(两次大写Z)
Cora数据集:7分类数据,2708 paper分成7个类别
Case_Based,Genetic_Algorithms,Neural_Networks,Probabilistic_Methods
Reinforcement_Learning,Rule_Learning,Theory
每个样本均有1433个0/1的标签,构成向量,只不过其值只能是0或1,样本格式:
<paper_id> <word_attributes>+ <class_label> 这是cora.content文件的数据
还有一个引用数据,一个paper引用另一个paper数据,两行paper_id,这种数据就构成了边。
下面看代码,以dgl库中torch代码为例,重点是看GATConv这个函数(可应用于同构图和单向图),公式如下:
也就是上面的第5步计算得到的alpha再进行计算。
两个|表示concat,下面看代码,干脆讲下dgl -Graph初步,
构建图都是用边表示的,一般需要u,v两个参数,比如下图,
上面的节点用u表示,下面的节点用v表示,无论啥样的图都能用这种形式表达,只要有边就可以用两列数据表示。
>>> src_ids = torch.tensor([2, 3, 4])
>>> dst_ids = torch.tensor([1, 2, 3])
>>> g = dgl.graph((src_ids, dst_ids))
>>> g
Graph(num_nodes=5, num_edges=3,ndata_schemes={}edata_schemes={})
>>> g.nodes()
tensor([0, 1, 2, 3, 4])
>>> g.edges()
(tensor([2, 3, 4]), tensor([1, 2, 3]))
nodes个数是从0到里面最大值算的,所以里面有4+1=5个,当然也可以如下,num_nodes=100,那么就是从0到99,
>>> g = dgl.graph((src_ids, dst_ids), num_nodes=100)
>>> g
Graph(num_nodes=100, num_edges=3,ndata_schemes={}edata_schemes={})
>>> g.num_nodes()
100
引用数据恰好就是边,就可以用u,v表示,下面具体看看,
>>> g.ndata.items()
ItemsView({'feat': tensor([[0., 0., 0., ..., 0., 0., 0.],[0., 0., 0., ..., 0., 0., 0.],[0., 0., 0., ..., 0., 0., 0.],...,[0., 0., 0., ..., 0., 0., 0.],[0., 0., 0., ..., 0., 0., 0.],[0., 0., 0., ..., 0., 0., 0.]]), 'label': tensor([3, 4, 4, ..., 3, 3, 3]), 'val_mask': tensor([False, False, False, ..., False, False, False]), 'test_mask': tensor([False, False, False, ..., True, True, True]), 'train_mask': tensor([ True, True, True, ..., False, False, False])})
>>> g.ndata["feat"].shape
torch.Size([2708, 1433])
>>> g.ndata["label"].shape
torch.Size([2708])
>>> g.ndata["train_mask"].shape
torch.Size([2708])
>>> g.ndata["val_mask"].shape
torch.Size([2708])
>>> g.ndata["test_mask"].shape
torch.Size([2708])
疑问,mask到底是啥?有啥子用?参考代码 。bool类型
这就需要了解GCN中的data使用方法,作者说了,需要N*N的连接矩阵(表示N个节点之间的转移关系,就是边的指向),需要节点向量N*D,D是每个节点features的维度,需要N*E表示label,但是有这些数据还是不知道具体怎么构建训练数据(x,y,tx,ty,allx,ally等)及graph,这个且看下个博文。
这里先解决mask是啥子??
def sample_mask(idx, l):"""Create mask."""mask = np.zeros(l)mask[idx] = 1return np.array(mask, dtype=np.bool)
train数据是前面140(从0开始数的140个,不含140索引),val数据是从140到639的500个,test数据是从1708到2707的100个
train_mask = sample_mask(idx_train, labels.shape[0])val_mask = sample_mask(idx_val, labels.shape[0])test_mask = sample_mask(idx_test, labels.shape[0])
这个生成的mask就是使用到此数据(index)为True,未使用的数据为False,仅此而已。长度都是2708
数据构建且看下文分解。
愿我们终有重逢之时,而你还记得我们曾经讨论的话题
GAT解读graph attention network相关推荐
- 图注意力网络(Graph Attention Network, GAT) 模型解读与代码实现(tensorflow2.0)
前面的文章,我们讲解了图神经网络三剑客GCN.GraphSAGE.GAT中的两个: 图卷积神经网络(GCN)理解与tensorflow2.0代码实现 GraphSAGE 模型解读与tensorflow ...
- Graph Attention Network (GAT) 图注意力模型
文章目录 1. GAT基本原理 1.1 计算注意力系数(attention coefficient) 1.2 特征加权求和(aggregate) 1.3 multi-head attention 2. ...
- 深入理解图注意力机制(Graph Attention Network)
参考来源:https://mp.weixin.qq.com/s/Ry8R6FmiAGSq5RBC7UqcAQ 1.介绍 图神经网络已经成为深度学习领域最炽手可热的方向之一.作为一种代表性的图卷积网络, ...
- Graph Attention Network (GAT) 的Tensorflow版代码解析
文章目录 代码结构 参数设置 数据加载 特征预处理 模型定义 GAT核心定义:layers.py gat.py base_gattn.py 关于GAT的基本原理解析可查看另一篇博客: Graph At ...
- DeepLearning | 图注意力网络Graph Attention Network(GAT)论文、模型、代码解析
本篇博客是对论文 Velikovi, Petar, Cucurull, Guillem, Casanova, Arantxa,et al. Graph Attention Networks, 2018 ...
- GAT - Graph Attention Network 图注意力网络 ICLR 2018
文章目录 1 相关介绍 GCN的局限性 本文贡献(创新点) attention 引入目的 相关工作 谱方法 spectral approaches 非谱方法 non-spectral approach ...
- 【论文解读 WWW 2019 | HAN】Heterogeneous Graph Attention Network
论文题目:Heterogeneous Graph Attention Network 论文来源:WWW 2019 论文链接:https://arxiv.org/abs/1903.07293v1 代码链 ...
- HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW2019
论文题目:Heterogeneous Graph Attention Network (HAN)异构图注意力网络 作者:北京邮电大学Xiao Wang,Houye Ji等人 来源:WWW2019 论文 ...
- HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW 2019
文章目录 1 相关介绍 背景 元路径 meta-path 异构图和同构图 相关工作 Graph Neural Network Network Embedding 贡献 2 HAN模型 2.1 Node ...
最新文章
- LSTM训练手写数字识别
- 使用curl操作InfluxDB
- MVC之排球比赛计分程序 ——(二)架构概要设计
- 原创 | 微服务网关 Kong 科普
- CYQ.Data 数据框架 V4.0 开源版本发布(源码提供下载,秋色园V2.5版本标配框架)
- shell之通过if [ $? != 0 ]判断上次程序是否执行成功
- vue打包后不使用服务器直接访问方法
- 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
- 最佳圆角字体,设计师的最爱
- java docker 持续集成_最佳实战Docker持续集成图文详解
- 通过谓词查找第一个元素
- Vim 的几个彩蛋。。
- ListView 控件与 ImageList 控件
- 【转】常见问题及应用技巧---------[BIOS篇]
- 油管机器学习基础 学习笔记
- ggplot2——双坐标轴?
- 笔记本电脑如何安装Linux系统
- 2020年的发展,想转行学前端还是后端好
- 从今天开始,请叫我,新生代农民工
- 自动化立体仓库软件(WMSWCS)功能介绍
热门文章
- android发送电子邮件,Android发送电子邮件
- CSDN-迪米特法则
- “云”溪笔谈 | 走完过渡期“沉浸式视频云”时代来临
- 通过雪花(snowflake)算法用Python实现一个简单的发号器
- Far planner 部署真实小车 树莓派部署lego_loam
- VUE 百度离线地图的下载与使用
- 内网渗透之跨路由访问
- Jmeter学习-BeanShell 内置变量vars、props、prev
- 听“Siri之父”讲述Siri背后的故事
- php sequelize,关于javascript:eggjs-sequelize-的常用方法总结