from sklearn.datasets import load_iris import torch from torch_geometric.data import Data import networkx as nx import torch.nn.functional as F from torch_geometric.nn import GCNConv data = load_iris() y = data.target x = data.data G = nx.Graph() num = 100 nodes = list(range(num)) # [0,1,2,3,4,5] G.add_nodes_from(nodes) # 从列表中加点 edges = [] # 存放所有的边,构成无向图(去掉最后一个结点,构成一个环) for idx in range(num): for idy in range(num): edges.append((idx, idy)) # 将所有边加入网络 G.add_edges_from(edges) print(G.nodes()) print(G.edges()) edges_graph = [list(i) for i in G.edges()] edge_index = torch.tensor(edges_graph, dtype=torch.long) x1 = torch.tensor(x[0:100, :], dtype=torch.float) data = Data(x=x1, edge_index=edge_index.t().contiguous(), y=torch.tensor(y[0:100], dtype=torch.long)) print(data) class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(4, 16) self.conv2 = GCNConv(16, 3) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) return F.softmax(x, dim=1) model = Net() 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.cross_entropy(out, data.y) loss.backward() optimizer.step() print(loss.data)
借助于pytorch的GNN网络解决鸢尾花分类问题
最新推荐文章于 2024-05-06 11:09:44 发布