使用PyTorch Geometric(PyG)构建图神经网络(GNN)的步骤如下:
### 1. **安装PyTorch Geometric**
首先确保已安装PyTorch,然后通过pip安装PyG及其依赖:
```bash
pip install torch torchvision torchaudio
pip install torch-geometric
```
### 2. **核心组件**
PyG提供以下关键模块:
- **数据表示**:`torch_geometric.data.Data`(存储节点特征、边索引等)
- **图卷积层**:如`GCNConv`、`GATConv`、`SAGEConv`等
- **数据集**:内置常用图数据集(如`Planetoid`)
### 3. **构建步骤**
#### (1) 定义图数据
使用`Data`类存储图结构:
```python
from torch_geometric.data import Data
# 节点特征矩阵 (num_nodes x num_features)
x = torch.tensor([[1], [2], [3]], dtype=torch.float) # 3个节点,每个1维特征
# 边索引 (2 x num_edges),表示无向图的连接关系
edge_index = torch.tensor([[0, 1, 1, 2],
[1, 0, 2, 1]], dtype=torch.long) # 0-1, 1-2互相连接
data = Data(x=x, edge_index=edge_index)
```
#### (2) 定义GNN模型
以GCN为例:
```python
import torch.nn as nn
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
class GCN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.conv1 = GCNConv(input_dim, hidden_dim)
self.conv2 = GCNConv(hidden_dim, output_dim)
def forward(self, data):
x, edge_index = data.x, data.edge_index
x = self.conv1(x, edge_index)
x = F.relu(x)
x = F.dropout(x, p=0.5, training=self.training)
x = self.conv2(x, edge_index)
return F.log_softmax(x, dim=1)
# 实例化模型 (输入1维特征,隐藏层16维,输出2维)
model = GCN(input_dim=1, hidden_dim=16, output_dim=2)
```
#### (3) 训练模型
```python
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
criterion = nn.NLLLoss()
# 模拟训练循环
for epoch in range(100):
model.train()
optimizer.zero_grad()
out = model(data)
loss = criterion(out[data.train_mask], data.y[data.train_mask]) # 假设有train_mask和y
loss.backward()
optimizer.step()
```
### 4. **常用图卷积层**
- `GCNConv`:图卷积网络
- `GATConv`:图注意力网络
- `SAGEConv`:GraphSAGE
- `ChebConv`:切比雪夫谱卷积
### 5. **使用内置数据集**
```python
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='/tmp/Cora', name='Cora') # 加载Cora引文数据集
data = dataset[0] # 获取图数据
```
### 6. **腾讯云相关产品推荐**
- **GPU算力**:使用[腾讯云GPU云服务器](https://cloud.tencent.com/product/cvm-gpu)加速神经网络训练
- **存储**:图数据较大时可用[对象存储COS](https://cloud.tencent.com/product/cos)存储数据集
- **部署**:训练好的模型可部署到[腾讯云TI平台](https://cloud.tencent.com/product/ti)或[容器服务TKE](https://cloud.tencent.com/product/tke)
### 示例:完整GCN训练流程(Cora数据集)
```python
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GCNConv
dataset = Planetoid(root='/tmp/Cora', name='Cora')
data = dataset[0]
class GCN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(dataset.num_features, 16)
self.conv2 = GCNConv(16, dataset.num_classes)
def forward(self, data):
x, edge_index = data.x, data.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()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# ...后续训练代码类似...
```...
展开详请