【Pytorch Geometric学习(一)】创建数据集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于PyTorch Geometric实现分类的代码,使用的是GCN模型。 首先,需要安装PyTorch Geometric: ``` pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.7.0+${CUDA}.html pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.7.0+${CUDA}.html pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.7.0+${CUDA}.html pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.7.0+${CUDA}.html pip install torch-geometric ``` 然后,导入必要的库: ```python import torch import torch.nn.functional as F from torch_geometric.datasets import Planetoid import torch_geometric.transforms as T from torch_geometric.nn import GCNConv from torch_geometric.data import DataLoader ``` 接着,定义数据集和数据转换: ```python dataset = Planetoid(root='data/Planetoid', name='Cora', transform=T.NormalizeFeatures()) ``` 这里使用了Planetoid数据集中的Cora数据集,该数据集包含2708个科学出版物的引用关系,每篇论文被分为7类之一,这里我们将其转化为二分类,即将每篇论文标记为1或0。 然后,定义GCN模型: ```python class GCN(torch.nn.Module): def __init__(self, num_features, hidden_size, num_classes): super(GCN, self).__init__() self.conv1 = GCNConv(num_features, hidden_size) self.conv2 = GCNConv(hidden_size, 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) ``` 这里的GCN模型由两个GCNConv层组成,其中第一个层的输入维度为节点特征数,输出维度为隐藏层维度,第二个层的输入维度为隐藏层维度,输出维度为类别数。在每个层之间,使用ReLU激活函数和Dropout进行正则化,最后使用log_softmax作为输出。 接下来,定义训练函数: ```python def train(model, optimizer, data): 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 loss.item() ``` 这里的训练函数接受一个GCN模型、一个优化器和一个数据集,将模型设置为训练模式,清空优化器的梯度,计算模型的输出和损失,然后进行反向传播和参数更新。 接着,定义测试函数和评估函数: ```python def test(model, data): model.eval() logits = model(data.x, data.edge_index) pred = logits.argmax(dim=1) test_correct = pred[data.test_mask] == data.y[data.test_mask] test_acc = int(test_correct.sum()) / int(data.test_mask.sum()) return test_acc def evaluate(model, data, optimizer, num_epochs): for epoch in range(num_epochs): loss = train(model, optimizer, data) test_acc = test(model, data) print('Epoch [{}/{}], Loss: {:.4f}, Test Acc: {:.4f}' .format(epoch+1, num_epochs, loss, test_acc)) ``` 这里的测试函数将模型设置为评估模式,计算模型的输出和预测,然后计算测试准确率。评估函数接受一个GCN模型、一个数据集、一个优化器和一个训练周期数,循环训练模型并计算损失和测试准确率。 最后,加载数据集创建模型、定义优化器并运行评估函数: ```python data = dataset[0] model = GCN(data.num_features, 16, 2) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4) evaluate(model, data, optimizer, num_epochs=200) ``` 这里的GCN模型使用了16个隐藏节点,并使用Adam优化器进行优化,学习率为0.01,权重衰减为5e-4,训练周期数为200。 完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值