Homogeneous Graph与Heterogeneous Graph
提供图训练的小知识
在一张图进行训练时, 可能由于层数的增加,使得结点可以充分汇聚到其他结点的信息。
layer0: 直接连接的信息被汇聚。
layer1: 间接连接的结点被汇聚。
layer2: …
Homogeneous Graph与Heterogeneous Graph的区别
- Homogeneous Graph(同构图)
同构图是指所有节点和边都是同质的,即节点之间的连接方式相同,边的类型相同。在同构图中,所有节点和边都属于同一种类型。例如,社交网络中的好友关系图就是一个同构图,其中所有节点都代表用户,边代表用户之间的好友关系。
在 DGL 中,使用 dgl.graph() 函数可以创建同构图。同构图的创建可以直接从节点和边的张量数据中构建,所有的节点和边都具有相同的类型。
- Heterogeneous Graph(异构图)
异构图是指节点和边可以有不同的类型,节点之间的连接方式和边的类型可以不同。在异构图中,节点和边可以代表不同的实体或关系,具有多样性。例如,电子商务网站中的商品-用户-类别三元关系图就是一个异构图,其中节点分为商品、用户和类别三种类型,边代表商品与用户之间的购买关系以及商品与类别之间的归属关系。
在 DGL 中,使用 dgl.heterograph() 函数可以创建异构图。异构图的创建需要指定不同类型的节点和边,以及它们之间的连接关系。
在DGL(Deep Graph Library) 定义 同构图
- 初始化图数据
初始化数据
import dgl
import torch
# 初始化图列表
graph_list = []
# 构建每组对话的图
for _ in range(batchsize):
# 假设每组对话有5个句子
num_sentences = 5
sentence_features = torch.randn(num_sentences, 768) # 句子级特征
# 添加句子级节点
g.add_nodes(num_sentences, {
'sentence_feat': sentence_features})
g.add_edges([xxxx], [xxxx]) # 添加结点 ([起始结点],[终端结点])
# 将图添加到图列表中
graph_list.append(g)
# 批次化图
batched_graph = dgl.batch(graph_list)
- 定义同构图GCN