1 图卷积概念
图卷积获取特征需要:各节点输入特征、网络结构图。
图卷积是半监督任务,不需要全部标签,少量标签也能训练,计算损失时只考虑有标签。
2 图卷积计算方式
针对橙色节点,计算特征:平均其邻居特征(包括自身)后传入神经网络。
GCN也可以做多层,每一层输入的还是节点特征。
G:图
A:邻接矩阵
D:各个节点的度
F:每个节点的特征
其实就是邻接矩阵(A)与特征矩阵(F)进行乘法操作,表示聚合邻居信息。
考虑自己:
这个时候度矩阵也得变。
矩阵scale:相当于对行做了归一化。
公式变成: 也可以写成:
需要对列也做归一化:
因为归一化了两次,所以需要把其中一个矩阵打半折。
3 图的基本公式
图的层数两三层就合适,多了反而差。
4 API Doc
Refer to this document to configure the corresponding environment:http://t.csdn.cn/9vOu3
API document: torch_geometric.datasets — pytorch_geometric documentation文章来源:https://www.toymoban.com/news/detail-707858.html
5 GCN yields a low-dimensional embedding vector
import torch
import torch.nn as nn
import torch.nn.functional as F
class GraphConvolutionLayer(nn.Module):
def __init__(self, input_dim, output_dim):
super(GraphConvolutionLayer, self).__init__()
self.linear = nn.Linear(input_dim, output_dim)
def forward(self, adjacency_matrix, features):
# adjacency_matrix: 图的邻接矩阵,features: 节点特征矩阵
# 计算GCN层的输出
support = torch.matmul(adjacency_matrix, features)
output = self.linear(support)
return output
# 创建一个简单的图
# 假设有3个节点,每个节点有2维的特征
num_nodes = 3
input_dim = 2
adjacency_matrix = torch.tensor([[0, 1, 1],
[1, 0, 1],
[1, 1, 0]], dtype=torch.float32)
features = torch.tensor([[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0]], dtype=torch.float32)
# 创建一个GCN层
gcn_layer = GraphConvolutionLayer(input_dim, output_dim=1)
# 计算GCN层的输出
output = gcn_layer(adjacency_matrix, features)
print("GCN层的输出:")
print(output)
文章来源地址https://www.toymoban.com/news/detail-707858.html
到了这里,关于【图神经网络 02】图卷积的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!