RGCN的torch简单案例

简介: RGCN 是指 Relational Graph Convolutional Network,是一种基于图卷积神经网络(GCN)的模型。与传统的 GCN 不同的是,RGCN 可以处理具有多种关系(边)类型的图数据,从而更好地模拟现实世界中的实体和它们之间的复杂关系。RGCN 可以用于多种任务,例如知识图谱推理、社交网络分析、药物发现等。以下是一个以知识图谱推理为例的应用场景:假设我们有一个知识图谱,其中包含一些实体(如人、物、地点)以及它们之间的关系(如出生于、居住在、工作于)。图谱可以表示为一个二元组 (E, R),其中 E 表示实体的集合,R 表示关系的集合,每个关系 r ∈ R

RGCN 是指 Relational Graph Convolutional Network,是一种基于图卷积神经网络(GCN)的模型。与传统的 GCN 不同的是,RGCN 可以处理具有多种关系(边)类型的图数据,从而更好地模拟现实世界中的实体和它们之间的复杂关系。


RGCN 可以用于多种任务,例如知识图谱推理、社交网络分析、药物发现等。以下是一个以知识图谱推理为例的应用场景:


假设我们有一个知识图谱,其中包含一些实体(如人、物、地点)以及它们之间的关系(如出生于、居住在、工作于)。图谱可以表示为一个二元组 (E, R),其中 E 表示实体的集合,R 表示关系的集合,每个关系 r ∈ R 可以表示为一个三元组 (s, p, o),其中 s, o ∈ E 表示主语和宾语实体,p ∈ R 表示关系类型。


我们的目标是预测两个实体之间是否存在某种关系类型。为了达到这个目标,我们可以将实体和关系作为节点和边来构建一个图,然后使用 RGCN 进行训练和推理。


具体地,我们可以使用 RGCN 对每个实体和关系进行编码,生成它们的嵌入向量表示。然后,对于给定的一对实体 s 和 o,我们可以将它们的嵌入向量拼接在一起,然后通过一个全连接层进行分类,以判断它们之间是否存在某种关系。


总之,RGCN 是一种可以处理多种关系类型的图神经网络,可以应用于多种任务,例如知识图谱推理、社交网络分析、药物发现等。


下面是一个使用 PyTorch 实现的简单 RGCN 的示例,其中使用随机生成的节点特征和邻接矩阵,随机数表示原始数据


import torch
import torch.nn as nn
import dgl
# 定义一个包含 RGCN 层的模型
class Net(nn.Module):
    def __init__(self, in_feats, hid_feats, out_feats, num_rels, num_bases):
        super(Net, self).__init__()
        self.in_feats = in_feats
        self.hid_feats = hid_feats
        self.out_feats = out_feats
        self.num_rels = num_rels
        self.num_bases = num_bases
        # 定义一个包含两层 RGCN 的模型
        self.layers = nn.ModuleList()
        self.layers.append(dgl.nn.pytorch.RGCNConv(in_feats, hid_feats, num_rels, num_bases=num_bases))
        self.layers.append(dgl.nn.pytorch.RGCNConv(hid_feats, out_feats, num_rels, num_bases=num_bases))
    def forward(self, graph, inputs):
        h = inputs
        for layer in self.layers:
            h = layer(graph, h)
        return h
# 构建一个包含 5 个节点、2 种关系类型的图
num_nodes = 5
num_rels = 2
features = torch.randn(num_nodes, 10)  # 随机生成节点特征
graph_data = {
    ('node', 'rel_type_1', 'node'): (torch.randint(0, num_nodes, (2, 10)), torch.randint(0, num_nodes, (2, 10))),
    ('node', 'rel_type_2', 'node'): (torch.randint(0, num_nodes, (2, 10)), torch.randint(0, num_nodes, (2, 10))),
}
graph = dgl.heterograph(graph_data)
# 构建一个包含 3 层 RGCN 的模型
model = Net(in_feats=10, hid_feats=20, out_feats=30, num_rels=num_rels, num_bases=5)
# 将图和节点特征传入模型,输出预测结果
output = model(graph, features)
print(output.shape)  # 输出结果的形状为 (5, 30)

在这个示例中,我们定义了一个包含两层 RGCN 的模型,每一层都由 RGCNConv 层组成。在前向传播过程中,我们将图和节点特征传入模型,输出预测结果。


-----------------------------------------------------------------------------------------


以下是使用PyTorch实现的简单RGCN示例,其中使用了随机生成的数据:


import torch
from torch import nn
from dgl.nn.pytorch import RelGraphConv
# 定义图结构
edges = torch.tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
edges_src = torch.tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
edges_dst = torch.tensor([1, 2, 3, 0, 4, 5, 6, 7, 8, 9])
rel_type = torch.tensor([0, 0, 0, 1, 1, 1, 2, 2, 2, 3])
graph = (edges_src, edges_dst)
# 定义模型
class RGCN(nn.Module):
    def __init__(self, in_feats, hid_feats, out_feats, rel_num):
        super(RGCN, self).__init__()
        self.conv1 = RelGraphConv(in_feats, hid_feats, rel_num)
        self.conv2 = RelGraphConv(hid_feats, out_feats, rel_num)
    def forward(self, g, feats, rel_type):
        h = self.conv1(g, feats, rel_type)
        h = torch.relu(h)
        h = self.conv2(g, h, rel_type)
        return h
# 创建模型
in_feats = 3
hid_feats = 4
out_feats = 2
rel_num = 4
model = RGCN(in_feats, hid_feats, out_feats, rel_num)
# 随机生成特征
features = torch.randn((10, 3))
# 计算输出
output = model(graph, features, rel_type)
print(output)

在这个示例中,我们首先定义了一个包含10个节点和4条关系的图结构,并使用RelGraphConv来定义RGCN模型。我们使用随机生成的3个特征作为每个节点的输入特征,通过模型计算得到每个节点的2个输出特征。最终输出结果为一个形状为(10, 2)的张量,表示了每个节点的输出特征。


以上代码主要实现了一个基于RGCN的图卷积神经网络模型,其中包括以下主要步骤:

  1. 定义图结构:通过定义节点间的边和关系类型来表示图结构,其中edges_src和edges_dst表示边的起点和终点,rel_type表示边的关系类型;
  2. 定义模型:定义RGCN模型,包括两层图卷积层RelGraphConv,输入特征维度为in_feats,隐藏层维度为hid_feats,输出维度为out_feats,边的关系类型数为rel_num;
  3. 创建模型:使用定义好的模型类,创建一个RGCN模型;
  4. 随机生成特征:生成10个节点的特征矩阵features,每个节点特征向量的维度为3;
  5. 计算输出:将图结构、节点特征和边的关系类型作为输入,通过RGCN模型进行计算,得到输出矩阵output,其中每行代表一个节点的输出特征向量,维度为out_feats。

在该示例中,我们使用了随机数来表示图的特征向量,因此输出结果没有实际意义,但是该示例可以帮助我们理解RGCN模型的基本结构和运作方式。


------def __init__(self, in_feats, hid_feats, out_feats, rel_num)中的输入参数含义


在这个代码片段中,__init__ 方法中的输入参数含义如下:

  • in_feats:输入特征的维度大小。在这个案例中,features 的大小为 (10, 3),因此 in_feats 是 3。
  • hid_feats:隐藏层特征的维度大小,也就是 RGCN 中间层的输出特征的维度大小。在这个案例中,我们设置 hid_feats 为 4。
  • out_feats:输出特征的维度大小。在这个案例中,我们设置输出特征维度为 2。
  • rel_num:边缘关系的种类数量。在这个案例中,我们设置有 4 种不同的边缘关系。


上述代码定义了一个图结构,其中包含10个节点和10条边。变量含义如下:

  • edges: 表示图中10条边的编号,取值为 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • edges_src: 表示每条边的源节点编号,取值为 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],与edges一一对应。
  • edges_dst: 表示每条边的目标节点编号,取值为 [1, 2, 3, 0, 4, 5, 6, 7, 8, 9],与edges一一对应。
  • rel_type: 表示每条边的关系类型,取值为 [0, 0, 0, 1, 1, 1, 2, 2, 2, 3],与edges一一对应。
  • graph: 表示由节点和边构成的图结构,它是一个元组,包含了两个张量 edges_srcedges_dst
目录
相关文章
|
机器学习/深度学习 图计算 图形学
同构图、异构图、属性图、非显式图
同构图(Homogeneous Graph)、异构图(Heterogeneous Graph)、属性图(Property Graph)和非显式图(Graph Constructed from Non-relational Data)。 (1)同构图:
3109 0
同构图、异构图、属性图、非显式图
|
7月前
|
机器学习/深度学习 人工智能 并行计算
图机器学习调研洞察:PyG与DGL
图神经网络(GNN)是人工智能领域的研究热点,广泛应用于社交网络、电商推荐、欺诈检测等。主流开源图学习引擎如DGL、PyG、GraphScope等在性能和社区活跃度上各有优劣。基于ogbn-products数据集的测试显示,DGL性能最优、内存占用最低,PyG次之。在AI for Science领域,PyG应用更广泛,尤其在小分子和晶体结构预测中表现突出。DGL采用Graph Centric方式,保留图结构;PyG则采用Tensor Centric方式,适合小图场景。
|
机器学习/深度学习 数据可视化 算法
经典时间序列分析概述:技术、应用和模型
时间序列数据按时间顺序收集,具有时间维度的重要性,需专门技术和模型进行分析预测。其应用广泛,涵盖经济预测、风险管理、天气预报、气候建模、流行病学、患者监测、需求预测、客户行为分析及预测性维护等领域。时间序列特征包括趋势、季节性和周期性模式。自相关和偏自相关用于衡量数据点间关系,白噪声表示无自相关的时间序列。平稳性指统计特性随时间保持一致,对建模至关重要。常见模型包括ARMA、ARIMA、SARIMA、ARCH和GARCH,用于捕捉复杂动态并预测未来模式。选择合适模型和确定顺序对准确预测至关重要。掌握这些基础知识不仅增强对复杂模型的理解,还能确保预测方法的稳健性和可靠性。
1266 1
经典时间序列分析概述:技术、应用和模型
|
人工智能 自然语言处理 API
【AI大模型】Transformers大模型库(十二):Evaluate模型评估
【AI大模型】Transformers大模型库(十二):Evaluate模型评估
440 0
|
机器学习/深度学习 搜索推荐 Python
L2范数(L2 norm)
L2范数(L2 norm),也称为欧几里德范数(Euclidean norm)或2-范数,是向量元素的平方和的平方根。它在数学和机器学习中经常被用作一种正则化项、距离度量或误差度量。
10126 76
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
1159 2
|
机器学习/深度学习 PyTorch API
RGCN模型成功运行案例
# 创建模型 in_feats = 3 hid_feats = 4 out_feats = 2 rel_num = 4 model = RGCN(in_feats, hid_feats, out_feats, rel_num) # 随机生成特征 features = torch.randn((10, 3)) # 计算输出 output = model(g, features, rel_type) print(output)
913 0
|
机器学习/深度学习 算法 PyTorch
Pytorch学习笔记(8):正则化(L1、L2、Dropout)与归一化(BN、LN、IN、GN)
Pytorch学习笔记(8):正则化(L1、L2、Dropout)与归一化(BN、LN、IN、GN)
1897 0
Pytorch学习笔记(8):正则化(L1、L2、Dropout)与归一化(BN、LN、IN、GN)
|
机器学习/深度学习 存储 人工智能
揭秘工业级大规模GNN图采样
互联网下的图数据纷繁复杂且规模庞大,如何将GNN应用于如此复杂的数据上呢?答案是图采样。结合阿里巴巴开源的GNN框架Graph-Learn(https://github.com/alibaba/graph-learn),本文重点介绍GNN训练过程中的各种图采样和负采样技术。
3550 0
揭秘工业级大规模GNN图采样
|
机器学习/深度学习 算法 搜索推荐
曼哈顿距离(Manhattan distance)
曼哈顿距离(Manhattan distance),也称为城市街区距离(City block distance)或L1距离(L1 distance),是两个点在标准坐标系上的绝对值距离之和。
1669 4