{/n/'title/': /'使用PYG库自定义数据集进行图神经网络训练和验证/',/n/'description/': /'本文介绍了如何使用PyTorch Geometric (PYG) 库自定义数据集,并利用图卷积网络 (GCN) 模型进行训练和验证。该数据集包含10张图片,每张图片包含20个节点,节点特征和标签信息分别存储在不同的CSV文件中。代码示例展示了如何读取数据、构建图数据、划分训练集和验证集、定义GCN模型以及训练和验证过程。/',/n/'keywords/': /'PYG, 图神经网络, GCN, 自定义数据集, 训练, 验证, 图卷积网络, 节点分类/',/n/'content/': /'///'import torch//nimport torch.nn as nn//nimport torch.optim as optim//nfrom torch_geometric.data import Data, DataLoader//nfrom torch_geometric.nn import GCNConv//n//nimport pandas as pd//n//n# 自定义数据集类//nclass My_dataset(Data)://n def init(self, x, edge_index, y)://n super(My_dataset, self).init()//n self.x = x//n self.edge_index = edge_index//n self.y = y//n//n# 读取数据//nedges_df = pd.read_csv('C:/Users/jh/Desktop/data/raw/edges.csv')//nfeatures1_df = pd.read_csv('C:/Users/jh/Desktop/data/raw/features1.csv')//nfeatures2_df = pd.read_csv('C:/Users/jh/Desktop/data/raw/features2.csv')//nlabel_df = pd.read_csv('C:/Users/jh/Desktop/data/raw/label.csv')//n//n# 构建图数据//nx = torch.cat([torch.tensor(features1_df.values), torch.tensor(features2_df.values)], dim=1)//nedge_index = torch.tensor(edges_df[['source', 'target']].values).t().contiguous()//ny = torch.tensor(label_df.values)//n//n# 划分训练集和验证集//ntrain_mask = torch.zeros(y.size(0), y.size(1))//ntrain_mask[:, :16] = 1 # 前16个节点作为训练集//nval_mask = torch.ones(y.size(0), y.size(1))//nval_mask[:, :16] = 0 # 剩下4个节点作为验证集//n//n# 创建数据集对象//ndataset = My_dataset(x, edge_index, y)//n//n# 创建数据加载器//nloader = DataLoader(dataset, batch_size=1, shuffle=False)//n//n# 定义GCN模型//nclass GCN(nn.Module)://n def init(self)://n super(GCN, self).init()//n self.conv1 = GCNConv(4, 16)//n self.conv2 = GCNConv(16, 2)//n//n def forward(self, x, edge_index)://n x = self.conv1(x, edge_index)//n x = torch.relu(x)//n x = self.conv2(x, edge_index)//n return x//n//n# 创建GCN模型实例//nmodel = GCN()//n//n# 定义损失函数和优化器//ncriterion = nn.CrossEntropyLoss()//noptimizer = optim.Adam(model.parameters(), lr=0.01)//n//n# 训练和验证//nfor data in loader://n x, edge_index, y = data.x, data.edge_index, data.y//n x = x.float()//n edge_index = edge_index.long()//n y = y.long()//n//n optimizer.zero_grad()//n output = model(x, edge_index)//n//n train_output = output[train_mask.bool()]//n train_label = y[train_mask.bool()]//n val_output = output[val_mask.bool()]//n val_label = y[val_mask.bool()]//n//n loss = criterion(train_output, train_label)//n loss.backward()//n optimizer.step()//n//n train_acc = (train_output.argmax(dim=1) == train_label).sum().item() / train_label.size(0)//n val_acc = (val_output.argmax(dim=1) == val_label).sum().item() / val_label.size(0)//n//n print('Train Loss: {:.4f} | Train Acc: {:.4f} | Val Acc: {:.4f}'.format(loss.item(), train_acc, val_acc))//n//n# 请注意,上述代码仅为示例代码,可能需要根据您的实际数据格式和模型结构进行适当修改。此外,您需要安装PyTorch和torch-geometric库才能运行该代码。//n/

使用PYG库自定义数据集进行图神经网络训练和验证

原文地址: https://www.cveoy.top/t/topic/mtfs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录