PyG中的数据集Cora等

https://blog.csdn.net/weixin_34570232/article/details/114452066

数据集

PyTorch Geometric已经包含有很多常见的基准数据集,包括:

Cora:一个根据科学论文之间相互引用关系而构建的Graph数据集合,论文分为7类:Genetic_Algorithms,Neural_Networks,Probabilistic_Methods,Reinforcement_Learning,Rule_Learning,Theory,共2708篇;

Citeseer:一个论文之间引用信息数据集,论文分为6类:Agents、AI、DB、IR、ML和HCI,共包含3312篇论文;

Pubmed:生物医学方面的论文搜寻以及摘要数据集。

以及网址中的数据集等等。

初始化这样的一个数据集也很简单,会自动下载对应的数据集然后处理成需要的格式,例如ENZYMES dataset (覆盖6大类的600个图,可用于graph-level的分类任务):

from torch_geometric.datasets import TUDataset

dataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES')

>>> ENZYMES(600)

len(dataset)

>>> 600

dataset.num_classes

>>> 6

dataset.num_node_features

>>> 3

对于其中的第一个图,可以这样取得:

data = dataset[0]

>>> Data(edge_index=[2, 168], x=[37, 3], y=[1])

#可以看出这个图包含边168/2=84条,节点37个,每个节点包含三个特征

data.is_undirected()

>>> True

再看一个node-level的数据集

from torch_geometric.datasets import Planetoid

dataset = Planetoid(root='/tmp/Cora', name='Cora')

>>> Cora()

#可以看到这个数据集只有一个图

len(dataset)

>>> 1

dataset.num_classes

>>> 7

dataset.num_node_features

>>> 1433

#train_mask

data = dataset[0]

>>> Data(edge_index=[2, 10556], test_mask=[2708],

train_mask=[2708], val_mask=[2708], x=[2708, 1433], y=[2708])

#用来训练的数据量

data.train_mask.sum().item()

>>> 140

#用来验证的数据量

data.val_mask.sum().item()

>>> 500

#用来测试的数据量

data.test_mask.sum().item()

>>> 1000

完整示例

下面再来看一个完整的例子:

import torch

import torch

import torch.nn.functional as F

from torch_geometric.nn import GCNConv

#数据集加载

from torch_geometric.datasets import Planetoid

dataset = Planetoid(root='/tmp/Cora', name='Cora')

#网络定义

class Net(torch.nn.Module):

def __init__(self):

super(Net, self).__init__()

self.conv1 = GCNConv(dataset.num_node_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)

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model = Net().to(device)

data = dataset[0].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.train_mask], data.y[data.train_mask])

loss.backward()

optimizer.step()

#测试

model.eval()

_, pred = model(data).max(dim=1)

correct = float(pred[data.test_mask].eq(data.y[data.test_mask]).sum().item())

acc = correct / data.test_mask.sum().item()

print('Accuracy: {:.4f}'.format(acc))


————————————————
版权声明:本文为CSDN博主「Vanessa Chen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_34570232/article/details/114452066

https://blog.csdn.net/weixin_39617497/article/details/111614670

你可能感兴趣的:(图神经网络,深度学习,自然语言处理,知识图谱)