目录

  • 前言
  • 1. DGL数据集
  • 2. dgl.DGLGraph
  • 3. dgl.graph
  • 4. dgl.heterograph

前言

在PyG搭建GCN前的准备:了解PyG中的数据格式中讲解了PyG中的数据格式,DGL是与PyG齐名的另一大图神经网络框架,二者各有优缺点,建议都学习并掌握。

1. DGL数据集

本篇文章使用Citeseer网络。Citeseer网络是一个引文网络,节点为论文,一共3327篇论文。论文一共分为六类:Agents、AI(人工智能)、DB(数据库)、IR(信息检索)、ML(机器语言)和HCI。如果两篇论文间存在引用关系,那么它们之间就存在链接关系。

DGL加载Citeseer网络:

import dgl
from dgl.data.citation_graph import CiteseerGraphDatasetdataset = CiteseerGraphDataset()
print(len(dataset))

输出为1,说明只有一个网络,然后我们输出一下这个网络:

graph = dataset[0]
print(type(graph))
print(graph)

输出:

<class 'dgl.heterograph.DGLHeteroGraph'>
Graph(num_nodes=3327, num_edges=9228,ndata_schemes={'train_mask': Scheme(shape=(), dtype=torch.bool), 'label': Scheme(shape=(), dtype=torch.int64), 'val_mask': Scheme(shape=(), dtype=torch.bool), 'test_mask': Scheme(shape=(), dtype=torch.bool), 'feat': Scheme(shape=(3703,), dtype=torch.float32)}edata_schemes={'__orig__': Scheme(shape=(), dtype=torch.int64)})

在DGL中,所有图都为dgl.DGLGraph格式,为了创建图,可以有以下两种方法:dgl.graph()和dgl.heterograph(),这两个方法分别创建同质图和异质图,二者返回的都是dgl.DGLGraph。

因此,下面先了解一下dgl.DGLGraph。

2. dgl.DGLGraph

dgl.DGLGraph类有以下属性和方法:

首先是属性:

DGLGraph.ntypes

返回图中所有类型节点的名称,如上面的网络返回:

['_N']

表明只有一种类型的节点,即论文节点。

同理还有边类型:

DGLGraph.etypes

输出为:

['_E']

同样只有一种类型的边。此外,DGLGraph.srctypes和DGLGraph.dsttypes分别返回源节点和目标节点的类型。

print(graph.metagraph())   # 返回异质图的元图
MultiDiGraph with 1 nodes and 1 edges
print(graph.num_nodes())   # 返回节点数
3327
print(graph.num_edges())   # 返回边数
9228

DGLGraph.nodes()返回节点集合:

print(graph.nodes())
tensor([   0,    1,    2,  ..., 3324, 3325, 3326])

边集合:

print(graph.edges())
(tensor([   2,    3,    0,  ..., 3323, 3326, 3325]), tensor([   0,    0,    0,  ..., 3324, 3325, 3326]))

同样是两个列表,分别对应两端节点编号。

ndata返回节点上的一些信息:

print(graph.ndata)
{'train_mask': tensor([False,  True, False,  ..., False, False,  True]), 'label': tensor([1, 4, 1,  ..., 5, 3, 3]), 'val_mask': tensor([False, False, False,  ..., False, False, False]), 'test_mask': tensor([False, False, False,  ..., False, False, False]), '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.]])}

feat表示节点特征。

同理有edata,这里不再详细讲解。

3. dgl.graph

利用dgl.graph()方法构建同质图:

dgl.graph(data, ntype=None, etype=None, *, num_nodes=None, idtype=None, device=None, row_sorted=False , col_sorted=False, **deprecated_kwargs )

其中data的形式为(U, V),表示边的两边节点集合;num_nodes表示节点数,如果没有给出,将使用data中的最大id+1,这可能会引发错误:

src_ids = torch.tensor([2, 3, 4])
# Destination nodes for edges (2, 1), (3, 2), (4, 3)
dst_ids = torch.tensor([1, 2, 3])
g = dgl.graph((src_ids, dst_ids))
print(g.num_nodes())

返回的节点数为5,如果给定num_nodes<=4,将引发错误。

4. dgl.heterograph

dgl.heterograph( data_dict , num_nodes_dict=None , idtype=None , device=None )

具体例子:

data_dict = {('user', 'follows', 'user'): (torch.tensor([0, 1]), torch.tensor([1, 2])),('user', 'follows', 'topic'): (torch.tensor([1, 1]), torch.tensor([1, 2])),('user', 'plays', 'game'): (torch.tensor([0, 3]), torch.tensor([3, 4]))
}
g = dgl.heterograph(data_dict)
print(g)

上图中,一共有user、topic和game三种类型的节点,他们有三种类型的关系,右边的数据表示边两边节点的索引。

此外,可以显式指定节点个数:

num_nodes_dict = {'user': 4, 'topic': 4, 'game': 6}
g = dgl.heterograph(data_dict, num_nodes_dict=num_nodes_dict)

这里一样指定数目不能小于边集合中的最小索引+1。

简单了解DGL中的数据格式相关推荐

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

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

  2. python中len用法_简单介绍Python中的len()函数的使用

    简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...

  3. 目标检测中的数据格式转换工具Roboflow

    目标检测中的数据格式转换工具.Roboflow Roboflow提供了您需要的所有工具,将原始图像转换为定制的训练有素的计算机视觉模型,并部署它在您的应用程序中使用. Roboflow支持检测目标和分 ...

  4. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  5. python数字类型转换函数_python中的各种数据类型中的数据格式转换

    一,转换list中的数据格式 str --> float (一)使用自定义函数 def str2float(list) strlist=[] for i in list: strlist.app ...

  6. php总是报错,php - 简单工厂模式中的问题,总是报错

    php - 简单工厂模式中的问题,总是报错 PHPzhong2017-04-11 09:53:49 0 3 101 //接口 interface calc{ public function g ...

  7. html js脚本限制 正则,简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...

  8. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  9. mysql int()_简单谈谈MySQL中的int(m)

    我们在设计表的时候,如果碰到需要设置int(整型)的时候,通常会按照惯例(大家都这样写)设置成int(11).那么这里为什么是11呢?代表的又是什么呢? 以前我一直以为这里是在限制int显示的宽度,后 ...

最新文章

  1. python3 列表_Python3 列表生成
  2. sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID...
  3. 如何向妻子解释OOD
  4. Tinkpad W540 BIOS bug ,中招了,中了一次还送了一次
  5. c3p0依赖导入失败问题(在使用到c3p0中的ComboPooledDataSource类的时候报错,依赖爆红)
  6. 动态规划 —— 背包问题 P06 —— 分组背包
  7. java魔方游戏代码_java swing实现的魔方小游戏源码附带视频指导运行教程
  8. HDU 6241 Color a Tree
  9. eclipse写javaee的时候js文件新增函数找不到
  10. Android开发之ListView中Adapter的优化
  11. c语言贪吃蛇积分用什么函数,C语言之贪吃蛇(curses库函数)
  12. win10计算机本地组策略编辑器,Win10家庭版没有本地组策略编辑器怎么办
  13. 华三交换机配置access命令_华三交换机查看配置命令是什么
  14. 饼图制作软件,饼图的制作方法
  15. Ubuntu下启动图形界面startx报错connection to X server lost
  16. wps怎么减少行间距,WPS的word怎么不能缩小行间距
  17. java基础知识整理
  18. 数字华容道(C++)
  19. 微生物16S测序数据的正确打开方式
  20. oracle使用PLSQL导出dmp文件一闪而过的解决办法

热门文章

  1. 微交易 | 说说最近自己接触到的一个骗子
  2. 基于NB-IOT特点发展方向浅析
  3. 爱奇艺AR应用亮相,联合Nreal探索内容新玩法
  4. #创新应用#文件大师:小身躯大智慧!
  5. 无领导小组游戏怎样脱颖而出_3种热门游戏在市场上脱颖而出的方式
  6. 网络舆情分析公司哪家的系统好推荐
  7. 漫画 | 程序员管理文档和普通人有什么不同?
  8. 谷歌Chrome浏览器怎么进人体浏览器啊或者说怎么打开webgl功能
  9. Java知识点——网络编程(如何网络编程和多线程实现tcp基础多文件交换功能)
  10. 融媒体时代背景下计算机应用,融媒体时代背景下电视媒体转型探讨