在人工智能和机器学习飞速发展的今天,Python图神经网络(Graph Neural Networks, GNNs)正成为处理非欧几里得数据(如社交网络、分子结构、知识图谱等)的强大工具。如果你是刚接触这个领域的小白,别担心!本文将带你一步步理解图神经网络的基本概念,并使用 Python 和 PyTorch Geometric 库动手构建一个简单的 GNN 模型。
传统神经网络(如 CNN、RNN)擅长处理网格状或序列化数据,但现实世界中很多数据是以图(Graph)的形式存在的——由节点(Nodes)和边(Edges)组成。例如:社交网络中的用户是节点,好友关系是边;分子结构中原子是节点,化学键是边。
图神经网络的核心思想是:通过聚合邻居节点的信息来更新当前节点的表示。这种“消息传递”机制使得模型能够捕捉图的拓扑结构。

我们将使用 PyTorch Geometric(简称 PyG),这是 PyTorch 的一个扩展库,专为图神经网络设计。它提供了大量预定义的图数据集、GNN 层和实用工具。
首先,确保你已安装 PyTorch。然后运行以下命令安装 PyTorch Geometric:
# 安装 PyTorch Geometric(根据你的 PyTorch 版本选择对应命令)pip install torch-scatter torch-sparse torch-cluster torch-spline-conv torch-geometric -f https://data.pyg.org/whl/torch-2.0.0+cpu.html我们使用经典的 Cora 引文网络数据集。在这个数据集中,每篇论文是一个节点,引用关系是边,任务是预测论文的类别。
import torchfrom torch_geometric.datasets import Planetoiddataset = Planetoid(root='/tmp/Cora', name='Cora')data = dataset[0] # Cora 只有一个图print(f'节点数: {data.num_nodes}')print(f'边数: {data.num_edges}')print(f'特征维度: {data.num_node_features}')print(f'类别数: {dataset.num_classes}')我们将使用最基础的 GNN 层 —— GCNConv(Graph Convolutional Network)。它通过聚合邻居节点的特征来更新当前节点。
import torch.nn.functional as Ffrom torch_geometric.nn import GCNConvclass GCN(torch.nn.Module): def __init__(self, num_features, hidden_channels, num_classes): super().__init__() self.conv1 = GCNConv(num_features, hidden_channels) self.conv2 = GCNConv(hidden_channels, num_classes) def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1)model = GCN( num_features=dataset.num_node_features, hidden_channels=16, num_classes=dataset.num_classes)我们只在训练集上训练,在测试集上评估。注意:图数据中通常只有部分节点有标签。
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)def train(): model.train() optimizer.zero_grad() out = model(data.x, data.edge_index) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() return lossdef test(): model.eval() out = model(data.x, data.edge_index) pred = out.argmax(dim=1) acc = pred[data.test_mask] == data.y[data.test_mask] return int(acc.sum()) / int(data.test_mask.sum())for epoch in range(1, 201): loss = train() if epoch % 50 == 0: test_acc = test() print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}, Test Acc: {test_acc:.4f}')恭喜你!你已经成功用 Python 实现了一个基础的图神经网络。通过这个例子,你掌握了图神经网络入门的关键步骤:加载图数据、定义 GNN 模型、训练与评估。
想深入学习?可以尝试以下方向:
记住,PyTorch Geometric 教程和官方文档是你最好的朋友。随着实践的深入,你会越来越熟悉图数据深度学习的奥秘!
希望这篇教程能为你打开图神经网络的大门。动手试试吧,代码是最好的老师!
本文由主机测评网于2025-12-18发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025129436.html