标签搜索

目 录CONTENT

文章目录

安装torch-geometric

陈铭
2023-12-27 / 0 评论 / 0 点赞 / 138 阅读 / 1,165 字 / 正在检测是否收录...

各个库的作用

基础库

torch-geometric
是一个用于图神经网络 (GNN) 的扩展库,它提供了丰富的工具和函数,帮助你在 PyTorch 中进行图数据的处理、表示学习和图神经网络模型的构建。具体来说,PyTorch Geometric 主要用于以下几个方面:

  • 图数据处理:PyTorch Geometric 提供了用于表示图数据的数据结构, 比如 Data 对象,可以方便地存储节点特征、边索引、边属性等信息。此外,PyTorch Geometric 还提供了一些用于处理图数据的工具和函数,比如图采样、图转换、图可视化等功能。
  • 图神经网络模型构建:PyTorch Geometric 中包含了许多常用的图神经网络层和模型,比如 GCNConv、GATConv、SAGEConv 等,这些层可以方便地用于构建图神经网络模型,帮助你处理图数据上的节点分类、链接预测等任务。
  • 图表示学习:PyTorch Geometric 提供了一些用于图表示学习的方法,比如图嵌入方法(Graph Embedding)、图卷积神经网络(Graph Convolutional Network, GCN)、图注意力网络(Graph Attention Network, GAT)等,这些方法可以帮助你学习到图数据中节点的表示,从而应用于节点分类、图分类、链接预测等任务。

增强库

torch-scatter:提供了一些用于在图数据上进行聚合操作的函数。在图神经网络中,节点的特征聚合是非常常见的操作,torch-scatter 中的函数可以帮助你在图上进行节点特征的聚合操作,比如对邻居节点的特征进行求和、求均值等操作。

torch-sparse:提供了一些用于处理稀疏张量的函数。在图数据中,由于邻接矩阵通常是稀疏的,因此需要使用稀疏张量来高效地表示和处理邻接矩阵。torch-sparse 提供了一些函数来处理稀疏张量,比如创建稀疏张量、稀疏张量的乘法、转置等操作。

torch-spline-conv:实现了基于 B-Spline 插值的图卷积操作。这种图卷积操作可以在图上进行平滑的卷积操作,能够有效地捕获节点之间的局部结构信息。

torch-cluster:提供了一些用于图上聚类操作的函数。在图神经网络中,有时需要对图中的节点进行聚类操作,torch-cluster 提供了一些函数来进行图上的聚类操作,比如 KNN 图构建、最近邻搜索等操作。

方法1

大概率这个镜像打不开,即使能下,本地编译安装可能也是一堆问题,比如:本地c编译器和cuda的c版本对不上,不让安装等等
image

pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.1+cu102.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.9.1+cu102.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.9.1+cu102.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.9.1+cu102.html
pip install torch-geometric

方法2

浏览器挂上vpn,打开 https://pytorch-geometric.com/whl/torch-1.9.1+cu102.html
直接下载对应python版本的whl文件,本地直接安装编译后的制品
image-1703670795454

测试一下

我已经安装好了torch的cuda版本

import torch
from torch_geometric.nn import SAGEConv
import torch.nn.functional as F
from torch_geometric.data import Data

device=torch.device("cuda")

# 构造一个简单的图数据
x = torch.tensor([[1], [2], [3], [4]], dtype=torch.float).to(device)
edge_index = torch.tensor([[0, 1, 1, 2, 2, 3],
                           [1, 0, 2, 1, 3, 2]], dtype=torch.long).to(device)
y = torch.tensor([0, 1, 0, 1], dtype=torch.float).to(device)

data = Data(x=x, edge_index=edge_index, y=y)

# 定义SAGEConv层
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = SAGEConv(in_channels=1, out_channels=16)
        self.conv2 = SAGEConv(in_channels=16, out_channels=2)

    def forward(self, data):
        x, edge_index = data.x, data.edge_index

        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)

        return F.log_softmax(x, dim=1)

# 初始化模型
model = Net().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

# 训练模型
model.train()
for epoch in range(200):
    optimizer.zero_grad()
    out = model(data)
    loss = F.nll_loss(out, data.y.long())
    loss.backward()
    optimizer.step()

# 测试模型
model.eval()
_, pred = model(data).max(dim=1)
correct = int(pred.eq(data.y.long()).sum().item())
acc = correct / len(pred)
print('Accuracy: {:.4f}'.format(acc))
0

评论区