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網絡解決鳶尾花分類問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.