import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv class GCN(torch.nn.Module): def __init__(self, in_channels, out_channels): super().__init__() torch.manual_seed(1234) self.conv = GCNConv(in_channels, out_channels, add_self_loops=False) def forward(self, x, edge_index, edge_weight=None): x = F.dropout(x, p=0.5, training=self.training) x = self.conv(x, edge_index, edge_weight).relu() return x model = GCN(dataset.num_features, dataset.num_classes) model.train() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) print("Training on CPU.") for epoch in range(1, 6): optimizer.zero_grad() out = model(data.x, data.edge_index, data.edge_attr) loss = F.cross_entropy(out, data.y) loss.backward() optimizer.step() print(f"Epoch: {epoch}, Loss: {loss}")