目录

  • GCN
  • 代码实现

GCN

为什么需要gcn

  1. 之前的cnn无法处理非欧式距离的数据
  2. 而非欧式距离的数据(比如拓扑结构,网络结构)在现实中是一种广泛存在的数据结构

GCN原理

比较多的是从谱域来解释,关于怎么从二维卷积到图卷积,参考这个:从二维卷积到图卷积

  1. 定义谱域的卷积操作,其中有用到拉普拉斯矩阵
  2. 完整的卷积公式很复杂,通过切比雪夫近似得到gcn的迭代公式:

说明:

  1. A和D是基于图结构得到的,固定参数
  2. H是输入,节点的特征矩阵,输入一次H0,迭代得到中间层
  3. W是要学习的参数

理解:

  1. A 和 H 的乘积其实就是把所有的邻居节点向量进行相加
  2. A+I是把自身节点加上【Q1】
  3. DAD是对A做归一化,防止某些度比较大的节点影响模型训练【Q2】
  4. DADH就是利用邻接矩阵对H根据邻居信息进行聚合,最后乘以W类似于全连接矩阵。

代码实现

dgl官网代码:gcn

dgl里面图卷积用的公式为:

这是原论文里面公式12,论文
原理和上面的公式是一样的,主要是对邻居借点做归一化。
补充一个讲解:GCN

卷积部分: GraphConv

# 这个模块就是最基础的图卷积,也就是走 DADHW 这个公式# __ini__() 定义里面主要是定义W和激活函数
self._in_feats = in_feats
self._out_feats = out_feats
self._norm = norm
self._allow_zero_in_degree = allow_zero_in_degreeif weight:self.weight = nn.Parameter(th.Tensor(in_feats, out_feats))
else:self.register_parameter('weight', None)if bias:self.bias = nn.Parameter(th.Tensor(out_feats))
else:self.register_parameter('bias', None)self.reset_parameters()self._activation = activation# forward(), 主要做归一化,然后全连接,核心代码如下:# 做归一化
degs = graph.out_degrees().float().clamp(min=1)
norm = th.pow(degs, -0.5)  # 全联接
feat_src = feat_src * norm
feat_src = th.matmul(feat_src, weight)
rst = rst + self.bias# 激活
rst = self._activation(rst)

GCN模型

# 卷积层定义好后,这里就是定义2层卷积就行了,
class GCN(nn.Module):def __init__(self, in_size, hid_size, out_size):super().__init__()self.layers = nn.ModuleList()# two-layer GCNself.layers.append(dglnn.GraphConv(in_size, hid_size, activation=F.relu))self.layers.append(dglnn.GraphConv(hid_size, out_size))self.dropout = nn.Dropout(0.5)def forward(self, g, features):h = featuresfor i, layer in enumerate(self.layers):if i != 0:h = self.dropout(h)h = layer(g, h)return h

训练代码:

for epoch in range(200):model.train()logits = model(g, features)loss = loss_fcn(logits[train_mask], labels[train_mask])optimizer.zero_grad()loss.backward()optimizer.step()
  • 这里可以看出模型的输入是整个graph和所有特征节点向量。计算loss的时候用train_mask来筛选训练数据计算loss。因此gcn的方法对于动态图就不适应了。比如定义好graph后,训练完了,有新的节点加入,那么需要重新训练模型

cora数据结果

Epoch 00197 | Loss 0.3549 | Accuracy 0.7860
Epoch 00198 | Loss 0.3656 | Accuracy 0.7880
Epoch 00199 | Loss 0.3818 | Accuracy 0.7900
Testing...
Test accuracy 0.8090
  • paper里面是0.815

dgl-02 gcn相关推荐

  1. 【图神经网络DGL】GCN在Karate Club上的实战(消息传递范式 | 生成训练可视化动图)

    学习总结 回顾[图神经网络DGL]数据封装和消息传递机制 的数据封装,在做异构图神经网络时,DGL比PyG方便很多(尽管PyG已经支持了异构图Aminer和栗子,但对图结构数据做批处理还是需要自己实现 ...

  2. GNN教程:DGL框架实现GCN算法!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:秦州,算法工程师,Datawhale成员 引言 本文为GNN教程的 ...

  3. 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型

    一.DGL DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架,到现在为止,DGL已经高度封装了如GCN.GraphSage.GAT等常见的图神经网络模型,可以直接调用,比较方便,当 ...

  4. DGL教程【一】使用Cora数据集进行分类

    本教程将演示如何构建一个基于半监督的节点分类任务的GNN网络,任务基于一个小数据集Cora,这是一个将论文作为节点,引用关系作为边的网络结构. 任务就是预测一个论文的所属分类.每一个论文包含一个词频信 ...

  5. 深入理解图卷积神经网络(GCN)原理

    深入理解图卷积神经网络(GCN)原理 文章目录 深入理解图卷积神经网络(GCN)原理 前言 一.为什么需要GCN 二.GCN的原理 1.图的定义 2.GCN来了 2.1 矩阵计算公式 2.2 以小规模 ...

  6. 利用Mediapipe和DGL实现火影结印识别与追踪---特殊手势识别

    目录 1.DGl概述 2.DGL安装 3.DGL实操 4.图卷积神经网络模块 5.模型(转载于恩培大佬) 还记得曾经日思夜想也要追番的火影吗? 曾经的招式还可以依稀回忆起来吗? 今天我们来用图卷积神经 ...

  7. 「紫禁之巅」四大图神经网络架构

    近年来,人们对深度学习方法在图数据上的扩展越来越感兴趣.在深度学习的成功推动下,研究人员借鉴了卷积网络.循环网络和深度自动编码器的思想,定义和设计了用于处理图数据的神经网络结构.图神经网络的火热使得各 ...

  8. 知识图谱——相关链接

    先列一下之前我研究记录的相关博客 知识图谱自动构建技术 知识图谱(一)-- 简介 知识图谱 概念与技术 第一章 第二章 知识图谱 概念与技术 第三章 知识图谱 概念与技术 第四章 其他大佬链接: 知识 ...

  9. 图网络:从数据处理到DGL模型构建(GCN, GraphSAGE, RGCN)

    目录 1.数据处理 1.1.原始数据节点去重 1.2.训练集和测试集的节点划分 1.3.边数据中删除节点 1.4.节点特征数据和Label 2.建图 2.1.同质图 Networkx→DGL 2.2. ...

  10. 利用DGL中的消息传递API手搭GCN实现节点分类

    目录 1. 前言 2. 数据 3. GCN 3.1 消息函数 3.2 聚合函数 3.3 更新函数 3.4 模型训练/测试 1. 前言 前面的两篇文章分别介绍了DGL中的数据格式和消息传递API: 了解 ...

最新文章

  1. cmd命令控制台窗口一闪就消失解决办法
  2. 关于MySQL的酸与MVCC和面试官小战三十回合
  3. 安装Mysql提示1045错误解决方法
  4. 大话后端开发的奇淫技巧大集合
  5. Vue 学习第四天--第一部分 --盲点整理与昨天知识回顾
  6. log4j 禁止类输出日志_log4j 2过滤spring日志遇到的问题
  7. 【转】二、VTK用于QT的安装
  8. Elasticsearch 7.7.0 基本操作-基于 CMD 命令行
  9. Android9很多游戏玩不了,安卓狂野飙车9玩不了应该如何解决
  10. java程序设计_Java程序设计-Object类(笔记)
  11. idea java9以及以上 出现找不到class的情况
  12. 创建脚本的步骤整理(转发)
  13. 每天接触互联网 了解互联网是什么
  14. 双网络安全nvr/布控球,可双向同时接入国网B接口视频监控平台和国标28181平台
  15. 【大数据处理技术】实验4
  16. icmp回复报文_如果目标主机阻塞了,ICMP回显请求报文,我们可以
  17. appium测试Cannot start the ‘XXX‘ application报错,无法打开app
  18. 黑马培训的点滴(前端)
  19. VMware Horizon 8 2111 部署系列(十四)部署UAG
  20. 中国地质大学(北京) 研究生 2022秋《Python科学计算》期末考试 模拟题2 题目+参考答案

热门文章

  1. 销售杂谈(3)--客户为什么选择你?
  2. CNS级公众号推文汇总
  3. 【题库】上海市学校心理咨询师-发展心理学-考点解析 2.4 精神分析论
  4. iphone屏幕圆角插件_iOS8.4越狱美化插件Roundification 让通知中心横幅瘦身变圆角设计...
  5. 安装urdf_tutorial
  6. YOLO系列解读v1-v7
  7. 【统计学】Q1、Median、Q3含义
  8. 3d渲染是显示计算机内存不足,3DMax渲染总是计算机内存不足怎么办
  9. 深入理解Camera 六(硬件抽象层实现)
  10. 【STM32】电子时钟(2):STemWin+RTC