主要问题为版本环境问题,我的python版本为py3.6,torch-1.7,必须下载对应的版本的离线包,并且安装。
其次是数据集问题,数据集较大,且GitHub要翻墙,所以数据集问题也要解决。
离线whl包如下所示:
问题主要是:
model = Net().to('cpu')
Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y, num_nodes=num_nodes, other_attr=other_attr) 类没有构建
希望在后续学习中逐渐解决。
主要代码如下所示:
import torch
import torch.nn.functional as F
class Data(object):
def __init__(self, x=None, edge_index=None, edge_attr=None, y=None, **kwargs):
self.x = x
self.edge_index = edge_index
self.edge_attr = edge_attr
self.y = y
for key, item in kwargs.items():
if key == 'num_nodes':
self.__num_nodes__ = item
else:
self[key] = item
from torch_geometric.datasets import KarateClub
dataset = KarateClub()
data = dataset[0] # Get the first graph object.
print(data)
print('================================================ ==============') # 获取图的一些信息 print(f'Number of nodes: {data.num_nodes}') # 节点数量 print(f'Number of edges: {data.num_edges}') # 边数量 12345678910
print(f'Number of node features: {data.num_node_features}') # 节点属性的维度
print(f'Number of node features: {data.num_features}') # 同样是节点属性的维度
print(f'Number of edge features: {data.num_edge_features}') # 边属性的维度
print(f'Average node degree: {data.num_edges / data.num_nodes:.2f}') # 平均节点度
print(f'if edge indices are ordered and do not contain duplicate entries.: {data.is_coalesced()}') # 是否边是有 序的同时不含有重复的边
print(f'Number of training nodes: {data.train_mask.sum()}') # 用作训练集的节点
print(f'Training node label rate: {int(data.train_mask.sum()) / data.num_nodes:.2f}') # 用作训练集的节点的数量
print(f'Contains isolated nodes: {data.contains_isolated_nodes()}') # 此图是否包含孤立的节 点
print(f'Contains self-loops: {data.contains_self_loops()}') # 此图是否包含自环的边
print(f'Is undirected: {data.is_undirected()}') # 此图 是否是无向图
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='E:\\图神经网络\\codes\\dataset', name='Cora') # Cora()
print(len(dataset),dataset.num_classes,dataset.num_node_features)
data = dataset[0]
print(data.is_undirected())
print(data.train_mask.sum().item())
print(data.val_mask.sum().item())
print(data.test_mask.sum().item())
# model = Net().to('cpu')
# data = dataset[0].to('cpu')
# 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()
输出为:
Data(edge_index=[2, 156], train_mask=[34], x=[34, 34], y=[34])
================================================ ==============
Number of node features: 34
Number of node features: 34
Number of edge features: 0
Average node degree: 4.59
if edge indices are ordered and do not contain duplicate entries.: True
Number of training nodes: 4
Training node label rate: 0.12
Contains isolated nodes: False
Contains self-loops: False
Is undirected: True
1 7 1433
True
140
500
1000
总结:
day2总的来说比较简单