【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库

同学你好!本文章于2021年末编写,获得广泛的好评!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

DGL库是由纽约大学和亚马逊联手推出的图神经网络框架,支持对异构图的处理,开源相关异构图神经网络的代码,在GCMC、RGCN等业内知名的模型实现上也取得了很好的效果。

1 DGL库

1.1 DGL库的实现与性能

实现GNN并不容易,因为它需要在不规则数据上实现较高的GPU吞吐量。

1.1.1 DGL库简介

DGL库的逻辑层使用了顶点域的处理方式,使代码更容易理解。同时,又在底层的内存和运行效率方面做了大量的工作,使得框架可以发挥出更好的性能。

1.1.2 DGL库特点

GCMC:DGL的内存优化支持在一个GPU上对MovieLens10M数据集进行训练(原实现需要从CPU中动态加载数据),从而将原本需要24小时的训练时间缩短到1个多小时。

RGCN:使用全新的异构图接口重新实现了RGCN。减少了内存开销。

HAN:提供的灵活接口可以将一个异构图通过元路径转变成同构图。

Metapath2vec:新的元路径采样实现比原实现快2倍。

1.1.3 分子化学的模型库DGL-Chem

该分子库提供包括分子性质预测和分子结构生成等预训练模型,以及训练知识图谱嵌入专用包DGL-KE。其中DGL-KE的性能更是出色。

在单GPU上,DGL-KE能在7分钟内使用经典的TransE模型训练出FB15K的图嵌入。而GraphVite(v0.1.0)在4个GPU上运算需要14分钟。

DGL-KE的首个版本发布了TransE、CompEx和Distmut模型,支持CPU训练、GPU训练、CPU和GPU混合训练,以及单机多进程训练。

1.2 安装DGL库

1.2.1 查看本地CUDA版本

CMD中输入

nvcc --version

1.2.2 查看版本

CUDA对应的DGL版本查询(64位)https://conda.anaconda.org/dglteam/linux-64

1.2.3 安装版本

conda install -c dglteam dgl-cuda11.3

1.2.4  卸载DGL

若已经安装了不需要的DGL版本,比如0.7.1想替换为0.4.3版本,则要删除现有版本:

默认删除当前DGL:conda uninstall -c dglteam dgl-cuda10.2

(cuda10.2可根据自己的环境调整)

指定删除版本:conda uninstall -c dglteam dgl-cuda10.2==0.5.0
(cuda10.2==0.5.0可根据自己的环境调整,使用 conda list 可以查看使用的当前版本)

1.3 DGL库中的数据集

1.3.1  Sst(Stanford sentiment treebank,斯坦福情感树库)

每个样本都是—个树结构的句子,叶顶点表示单词;每个顶点还具有情感注释,共分为5类(非常消极、消极、中立、积极、非常积极)

1.3.2 KarateCub

数据集中只有一个图,图中的顶点描述社交网络中的用户是否是一家空手道俱乐部中的成员。

1.3.3 CationGraph

顶点表示作者,边表示引用关系。

1.3.4 CORA

顶点表示作者,边表示引用关系。

1.3.5 CORAFUll

CORA数据集的扩展,顶点表示论文,边表示论文间的引用关系。

1.3.6 AmazonCoBuy

顶点表示商品,边表示经常一起购买的两种商,。顶点特征表示产品的评论,顶点的类别标签表示产品的类别。

3.7 Coauthor

顶点表示作者,边表示共同撰写过论文的关系。顶点特征表示作者论文中的关键词,顶点类别标签表示作者的研究领域。

3.8 MiniGCDalaset(即mini graph classification dataset,小型图分类数据集)

包含8种不同类型的图形,包括循环图、星形图、车轮图、棒棒糖图、超立方体图、网格图、集团图和圆形梯形图。

3.9 TUDataset

图形分类中的图形内核数据集。

3.10 GINDataset(即graphLsomorphism network dataset,图同构网络数据集)

图内核数据集的紧凑子集。数据集包含流行的图形内核数据集的紧凑格式,包括4个生物信息学数据集(MUTAG、NCH、PROTEINS、PTC)和5个社交网络数据集(COLAB、IMDBBNARY、MDBMULT、REDDITBINARY,REDDITMULT5K)。

3.11 PPIDataset(即protein-protein interaction dataset,蛋白质-蛋白质相互作用数据集)

数据集包含24个图,每个图的平均顶点数为2372,每个顶点具有50个要素和121个标签。

3.12 QM7b

由7211个分子组成,所有的分子可以回归到14个分类目标。顶点表示原子,边表示键。

1.4 DGL库中数据集的加载

在使用时,可以通过dg.data库中的数据集类直接进行实例化。
实例化的参数要根据每个数据集类的构造函数的定义进行配置。
代码如下:

# 该代码的作用是创建并加载一个同构图数据集。该代码运行后,会自动从网络上下载指定的数据集
# 并解压缩,然后载入到内存,并返回数据集对象dataset。该数据集类与PyTorch的Dataset类兼容。
dataset=GINDataset('MUTAG',self-loop=True) #数据集为MUTAG,使用自环图

1.4.1 数据集加载的Tip

dgldata库中的数据集类规划得并不是太好,有的类直接裸露在数据下面,有的类则被额外封装了一层。

例如,CoraDataset类就被封装在citation_graph.py文件中,载入时需要编写如下代码:

from dgl.data import citation-graph
data = citation_graph.corapataset()
该代码在执行时会读取指定的数据集,并生成邻接矩阵,然后调用NetWorkx模块根据该邻接矩阵生成图以及训练数据集、测试数据集。

因此,在使用DGL的数据集时,还需要在dgl/data路径下单独查找,以库中实际的代码为准。

1.5 DGL库中的图(DGLGraph)

DGLGraph类封装一个特有的图结构,可以理解为DGL库的核心,DGL库中的大部分图神经网络是基于DGLGraph类实现的。

1.6 DGL库中的内联函数

DGL库提供了大量的内联(buit-in)函数,这些函数主要用于对边和顶点进行运算处理,它们的效率要比普通的图处理函数高很多。

DGL库中的内联函数都放在dgl.function模块下。在使用时,要配合DGLGraph图的消息传播机制进行运算。

消息传播机制属于DGL库的底层功能,常会在构建图神经网络模型中使用。

如果只使用DGL库中封装好的图神经网络模型,那么无须深入了解。

2 PYG库

PyG库是基于PyTorch构建的几何深度学习扩展库,可以利用专门的CUDA内核实现高性能。

在简单的消息传递APl之后,它将大多数近期提出的卷积层和池化层捆绑成一个统一的框架,支持CPU和GPU计算,并遵循不变的数据流范式,这种范式可以随着时间的推移动态改变图结构。

3 NetWorkx库

NetWorkk是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便地执行分析复杂网络数据、仿真建模等任务。

利用NetWorkx可以以标准化和非标准化数据格式存储网络,生成多种随机网络和经典网络,分析网络结构,建立网络模型,设计新的网络算法,进行网络绘制等。

3.1 NetWorkx库的安装和使用

由于NetWorkx库默认集成在Anaconda软件中,因此,如果已经安装了Anaconda,那么可以直接使用NetWorkx库。

3.2 查询NetWorkx库的版本

import networkx
print(networkx.__version__)
# 2.7.1

3.3 NetWorkx库支持的图结构

  1. Graph:无多重边无向图。
  2. DiGraph:无多重边有向图。
  3. MultiGraph:有多重边无向图。
  4. MuliDiGraph:有多重边有向图。

3.4 NetWorkx库中的图数据对象

NetWorkx库中的图数据对象可以通过nx.generate_graphml接口转化成graphm/文件格式的字符串。该字符串是以生成器形式存储的,每一个子图为生成器中的一个元素。

import networkx as nxG = nx.path_graph(4)
print(list(nx.generate_graphml(G)))

在该代码执行后,会输出graphml文件格式的图数据对象,具体如下:

['<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">', '  <graph edgedefault="undirected">', '    <node id="0" />', '    <node id="1" />', '    <node id="2" />', '    <node id="3" />', '    <edge source="0" target="1" />', '    <edge source="1" target="2" />', '    <edge source="2" target="3" />', '  </graph>', '</graphml>']

通过graphml文件格式的描述,实现图数据的文本形式显示,可以通过直接修改graphml文件的内容完成对图数据的维护,比使用接口函数的方式更直接,也更灵活。

3.4.1 graphml文件的持久化

使用nx_writegraphm接口可输出内存中的图对象,待编辑好之后,使用nx.read_graphml接口将文件加载到内存中。

3.4.2 graphml文件的打开方式

graphml的文件使用的是xml格式,可以用yEd Graph Edtor软件打开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给ubuntuGedit安装gedit-source-code-browser

插件链接下载 https://bugs.launchpad.net/ubuntu/source/gedit-source-code-browser-plugin/bug/1242126 下载这个安装完后还用不了&#xff0c;还要添加下面的补丁 diff -Naur old-plugins/sourcecodebrowser/ctags.py plugins/sourcecodebrowser/ctags.py --- old-plugin…

Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.

解决OMP: Hint: This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is l…

Linux 系统版本信息

1、# uname &#xff0d;a &#xff08;Linux查看版本当前操作系统内核信息&#xff09; 2、# cat /proc/version &#xff08;Linux查看当前操作系统版本信息&#xff09; 3、# cat /etc/issue 或cat /etc/redhat-release&#xff08;Linux查看版本当前操作系统发行版信息&…

DEVICE_ATTR的使用

使用DEVICE_ATTR&#xff0c;可以在sys fs中添加“文件”&#xff0c;通过修改该文件内容&#xff0c;可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR&#xff0c;BUS_ATTR&#xff0c;CLASS_ATTR。 这几个东东的区别就是&#xff0c;DEVICE_ATTR对应的文件…

【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

泛型(模拟list)

package Test; import java.util.Arrays; public class genericity<T> { private Object[] t; public genericity() { super(); t new Object[0]; } //增加数据 public void add(T t1) { t Arrays.copyOf(t, t.length 1); t[t.length - 1] t1; } //查询数据 public i…

中断处理的tasklet(小任务)机制-不过如此

中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是&#xff0c;中断是一个随机事件&#xff0c;它随时会到来&#xff0c;如果关中断的时间太长&#xff0c;CPU就不能及时响应其他的中断请求&#xff0c;从而造成中断的丢失。因此&#xf…

【Pytorch神经网络理论篇】 29 图卷积模型的缺陷+弥补方案

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】22 基于Cora数据集实现图注意力神经网络GAT的论文分类

注意力机制的特点是&#xff0c;它的输入向量长度可变&#xff0c;通过将注意力集中在最相关的部分来做出决定。注意力机制结合RNN或者CNN的方法。 1 实战描述 【主要目的&#xff1a;将注意力机制用在图神经网络中&#xff0c;完成图注意力神经网络的结构和搭建】 1.1 实现…

用OC和Swift一起说说二叉树

前言&#xff1a; 一&#xff1a;在计算机科学中&#xff0c;二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09;。二叉树常被用于实现二叉查找树和二叉堆。二&#xf…

【Pytorch神经网络理论篇】 30 图片分类模型:Inception模型

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

mtk pwmlinux timer

pwm控制还是有很多要注意的地方 附上驱动的代码 /** drivers/leds/leds-mt65xx.c** This file is subject to the terms and conditions of the GNU General Public* License. See the file COPYING in the main directory of this archive for* more details.** Hydrodent …

【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

CentOS7 编译安装golang和rpm安装golang

编译安装 1、下载golang二进制安装包&#xff1a; https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz 2、解压安装包到指定目录&#xff0c;此处以解压到/usr/local目录下为例&#xff1a; 1 tar -C /usr/local -xzf ../packages/go1.8.linux-amd64.tar.gz 3、在…

Class_fileAndroid应用调用方法

java代码调用 fos.write这里面是byte类型的 + private static final String LEDBLPATH="/sys/class/hdyrodent_charger_led/brightness"; + private final void SetChargerLedBrightness(String path,int brightness) + { + try{ + …

【Pytorch神经网络理论篇】 32 PNASNet模型:深层可分离卷积+组卷积+空洞卷积

1 PNASNet模型简介 PNASNet模型是Google公司的AutoML架构自动搜索所产生的模型&#xff0c;它使用渐进式网络架构搜索技术&#xff0c;并通过迭代自学习的方式&#xff0c;来寻找最优网络结构。即用机器来设计机器学习算法&#xff0c;使得它能够更好地服务于用户提供的数据。该…

s5k5e2ya MIPI 摄像头调试

1、驱动移植的话按照我之前的文章来做 驱动里面注意是几路的lane,一般mipi的话是差分信号&#xff0c;2路和4路是比较常见的。2、mipi波形 很明显上面的波形是不正确的。dp dn有一个都成了正弦波了。 首先&#xff0c;我们要找一下正确的波形 正确的波形应该是DP和DN不会同时…

css那些事儿4 背景图像

background:背景颜色&#xff0c;图像&#xff0c;平铺方式&#xff0c;大小&#xff0c;位置 能够显示背景区域即为盒子模型的填充和内容部分&#xff0c;其中背景图像将会覆盖背景颜色。常见的水平或垂直渐变颜色背景通常使用水平或垂直渐变的背景图像在水平或垂直方向平铺&a…

用Android UEventObserver监听内核event

很多时候我们在框架上层需要知道内核中某些事件的状态&#xff0c;用设备的show属性是可以供上层来查询&#xff0c;但是这需要上层设定一个较耗资源的循环。如果用UEventObserver就可以监听内核event&#xff0c;它是android Java层利用uevent与获取Kernel层状态变化的机制。 …

【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容

1 案例基本工具概述 1.1 数据集简介 Imagenet数据集共有1000个类别&#xff0c;表明该数据集上的预训练模型最多可以输出1000种不同的分类结果。 Imagenet数据集是目前深度学习图像领域应用得非常多的一个领域&#xff0c;关于图像分类、定位、检测等研究工作大多基于此数据…