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

2023-10-29

一、DGL

DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架,到现在为止,DGL已经高度封装了如GCN、GraphSage、GAT等常见的图神经网络模型,可以直接调用,比较方便,当然针对非常想挑战自己的编程能力又或者非常想从更底层的角度去学习图神经网络,建议直接看pytorch搭建的模型。

DGL的安装和使用可以看看这里,一般是先安装pytorch再安装DGL,不然容易出错,图神经网络框架DGL使用记录

关于DGL各种详细的API和相关使用案例,请参考官方文档,
DGL官方文档

二、GCN图卷积神经网络

先简单说一下GCN模型,GCN模型是图神经网络里面最早的模型,全称叫图卷积神经网络,先丢张结构示意图如下。
在这里插入图片描述

上图什么个意思呢?一般来说,图中每个节点都对应了一个专属的节点特征node_feat,当然不同节点之间连接的边也可以对应一个边特征edge_feat,一般是点特征的学习研究比较多。

上图怎么个更新法呢?比如x2同时连接了x1、x3和x4,那么更新过程就是:

node_feat[x2] = a1 x node_feat[x1] + a2 x node_feat[x2] + a3 x node_feat[x3] + a4 x node_feat[x4];

其中a表示不同节点的权重,说到这里,是不是感觉很熟悉,没错,这就是我们传统的卷积神经网络CNN的更新过程,GCN就是把欧式空间中的CNN转换到了非欧式空间的图结构上,所以这样一说,就很好理解了吧。

出于严谨,我们还需要知道这个模型具体的更新方程式,为了更好的理解GCN模型的公式是怎么来的,这里进行简单的推演说明,当然也为了加深大家的理解。

首先根据我们刚才说的,或者联系到CNN的计算过程,我们用H表示节点特征矩阵,W表示随机初始化的一个权重参数矩阵,那么就得到节点特征的更新方程如下。
在这里插入图片描述

其中A是邻接矩阵,表示点和点的连接关系,这样相乘的话和节点x有连接关系的其他节点特征就会根据相应权重累加到x的新特征信息上。

这样的公式简单明了,也大体对应上了CNN的更新过程,但是GCN的公式不是这个,虽然上述的公式搭建的模型已经有很好的学习能力了,但是GCN的作者又继续进行了相关的优化。

上述公式存在的问题如下:
(1)首先A是邻接矩阵,那么对角线上就是0,就会导致节点本身的特征信息被忽略,回顾CNN更新过程是把自身的特征信息也加上的,所以可以加个单位矩阵I,让对角线上为1,矩阵计算的时候把自己的特征也加上一起更新。
(2)A是一个没有经过标准化处理的矩阵,我们知道即便是原始数据训练也都应该进行一下原始数据的特征标准化,这样可以带来很多好处,比如模型训练更稳定,收敛效果更好等等,所以这里A应该进行特征标准化。,如果没标准化直接和原始的节点特征相乘,可能会改变节点特征的分布规律,带来一些不好估测的后果。
(3)如何标准化,论文的作者是直接让A乘节点的度矩阵D,度就是某个节点的连接数目(出度和入度之和)。乘度矩阵D的好处就是,度矩阵在一定程度上反应了节点的重要性,如果某个节点度很大,说明可能比较重要,这样子。

于是得到最终GCN的更新公式如下。
在这里插入图片描述
A’ = A + I,D’ 是A’ 的度矩阵,这里为什么要让度矩阵D’ 取-1/2的次幂,相关解释是因为是矩阵运算,不断更新过程中这样处理可以有效避免梯度爆炸等问题,使得训练可以更加平缓。

三、DGL搭建GCN代码

完整工程代码点击这里,如果对你的学习有所帮助,希望给个star,谢谢~。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图神经网络(一)DGL框架搭建GCN图卷积神经网络模型 的相关文章

随机推荐

  • Intel TBB简介及在Windows7 VS2013上源码的编译过程

    Intel TBB Intel Threading Building Blocks 是Intel线程构建块开源库 它的License是Apache 2 0 Intel TBB是一种用于并行编程的基于C 语言的框架 它是一套C 模板库 它提供
  • 【http协议】超详细介绍

    文章目录 一 协议 1 1 Method 1 1 1 HEAD 1 2 Status 1 3 Http Head Http 头 1 3 1 Http Request Body 1 3 1 1 Content Type 1 3 1 2 miu
  • 浅谈Web用户体验(二)

    在所有网页或浏览器的GUI中我最喜欢的是google的用户体验效果 平时我们只把它作为搜索工具 从没仔细欣赏过它的设计细节 有篇博客对google的用户体验总结的非常好 google的设计一向以简单著称 让页面清爽优雅地呈现 一方面减少页面
  • Notepad++找回缓存的内容

    场景 在使用Notepad 的时候 有一个非常方便的自动保存功能 也就是你在新建一个文档后 输入你的内容 在你没有手动保存前 Notepad 会帮你保存当前内容 当你没有保存就退出Notepad 下次进来Notepad 会自动把你上次编辑的
  • 图像处理之三角法图像二值化

    图像处理之三角法图像二值化 三角法求阈值最早见于Zack的论文 Automatic measurement of sister chromatid exchange frequency 主要是用于染色体的研究 该方法是使用直方图数据 基于纯
  • mybatis常见的报错点总结

    1 invalid comparison java util Date and java lang String 错误代码 正确代码 错误原因 将日期格式和字符串进行了比较 2 NumberFormatException 错误代码 正确代码
  • IDEA项目编写到一半 突然Install报错Cannot resolve org.apache.maven.plugins:maven-compiler-plugin:X.X.X

    描述 是一次很蛇皮的踩坑经历 原因很简单 但是太容易中招了 简单记录一下 项目没有做热部署 添加完一个CRUD的接口后 重启项目测试 突然就报错了 mvn clear install也没用 Cannot resolve org apache
  • 笔试真题解析

    恭喜发现宝藏 搜索公众号 TechGuide 回复公司名 解锁更多新鲜好文和互联网大厂的笔经面经 作者 TechGuide 全网同名 订阅专栏 进阶版 2023最新大厂笔试真题 题解 不容错过的宝藏资源 第一题 服务器能耗统计 100分 题
  • Fine BI、Smart BI、永洪BI、瓴羊Quick BI这些国产BI工具,都擅长哪些功能?

    近几年 随着国内大数据的火热 商业智能BI工具市场也迎来了大爆发 市面上涌现出了各种各样的BI工具 让很多企业在选择BI工具的时候遇上了 选择困难症 在最初 大多数企业都会选择Tableau 微软Power BI等外国公司的BI工具 然而
  • ARouter(七) 依赖注入

    当你从FirstActivity跳到SecondActivity 有时需要把参数值放在intent里面传过去 ARouter的依赖注入会帮你在SecondActivity里面的属性直接赋好参数值 当然需要你事先在SecondActivity
  • 西瓜书-3.9,3.10理解过程-线性模型

    许多人对3 9公式不理解 其实 min右侧只是用矩阵的形式表示了均方差的概念 大家可以结合矩阵的乘法运算举个例子试试 argmin表示右侧式子最小时w取得的值 我们的目标就是求出这个向量w 需要注意的是 实际问题中 我们的样例数可能很少 而
  • GPU基础与CUDA编程入门

    文章目录 一 GPU和CPU的区别 GPU 高吞吐量导向设计 CPU 低延迟导向设计 GPU适合什么场景 什么是Prefetch 二 CUDA与OpenCL 三 CUDA编程并行计算整体流程 内存模型 线程块 网格Grid 并行线程块组合
  • 【Python解题1】PAT 乙级1055 集体照(详解)测试点345错误原因分析

    题目传送门 语言 python3 9 编译工具 pycharm 社区版 输入样例 10 3 Tom 188 Mike 170 Eva 168 Tim 160 Joe 190 Ann 168 Bob 175 Nick 186 Amy 160
  • 《C++ System Programming Cookbook》第二章读书笔记

    第二章 C 重要知识点回顾 C primitive types 原生数据类型 char int float double wchar t bool void nullptr t 可用numeraic limits检查范围 sizeof检查大
  • 【翻译】如何在你的IT转型中浪费数以亿计的资金

    你担任范德雷工业公司的首席执行官已经有几年时间了 这是一家在运输领域存在了几十年的巨无霸 真正的战略 你真的希望股价能尽快上涨 这样你就可以在命运之轮转动之前 在最佳的时间点卖掉你的股票 而董事会也不可避免地要把你赶走 你已经厌倦了蒲公英
  • 甘特图排程组件开发(TsyGantt)

    甘特图在Project2000中 很是好用 可是我想在项目开发中还要买了MS的Project2000的版权 所以索性自己开发一套相关的组件
  • 【JavaWeb_Part05】JDBC?弱爆了,看看轻量级的 Mybatis FreeStyle

    开篇 上篇文章我们已经讲了 Mybatis 的入门以及简单的对单表进行增删改查 那么今天我们就来讲一下使用 mybatis 开发dao的两种方式以及 mysql 比较厉害的动态 sql 利用 mybatis 开发 DAO 1 原始的方式开发
  • 多线程之间共享数据的方式探讨

    多线程之间共享数据的方式探讨 方式一 代码一致 如果每个线程执行的代码相同 可以用一个 Runnable 对象 这个 Runnable 对象中存放那个共享数据 卖票系统可以这样做 public class MultiThreadShareD
  • java系统运维:使用java自带的工具监控系统(java)虚机的运行

    公司采用的B S架构开发的系统林林总总 有时候系统不稳定 分析起来很头疼 除了看日志 还很希望能知道系统虚拟机的运行情况 java 虚拟机从1 5开始 有类似的工具 jconsole 1 6开始不但有jconsole 还有升级版 jvisu
  • 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型

    一 DGL DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架 到现在为止 DGL已经高度封装了如GCN GraphSage GAT等常见的图神经网络模型 可以直接调用 比较方便 当然针对非常想挑战自己的编程能力又或者非常