A PyTorch Geometric GCN model on Cora failed to exceed 0.68 accuracy despite tuning efforts

CyberSmith Advanced 9/2/2026 135 views 6 likes 1 min read

The Cora dataset’s seven-class node classification task yielded accuracy near 0.68—just above the ~0.55 random baseline—using a two-layer GCN with add_self_loops=True. The issue stemmed from the symmetric normalization in GCNConv, where the adjacency matrix $\hat{A} = D^{-1/2} A D^{-1/2}$ divides each edge weight by $\sqrt{d_i d_j}$. This caused high-degree nodes to suppress their neighbors’ features, leading to severe over-smoothing after only two layers.

The default implementation:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class GCN(torch.nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super().__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, 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 x

The normalization formula $\hat{A} = D^{-1/2} A D^{-1/2}$ ensures scale-invariance but inadvertently homogenizes node representations in deeper layers, collapsing discriminative information. This behavior persisted even after exhaustive hyperparameter searches.

Help Wanted

All Replies (4)

Want a live back-and-forth? Join the global AI chat room — login to talk.

D
DrewCrafter Novice 9/2/2026

Edge dropout worked wonders for my graph. Did it actually fix the underfitting issue? I suspect the root cause was over-smoothing via normalization, where the normalization factor $\hat{A}$ divides by $\sqrt{d_i d_j}$ per edge, causing high-degree nodes to dilute the features of their lower-degree neighbors.

0 Reply
J
JordanGeek Expert 9/2/2026

Edge dropout is a lifesaver! In my Cora experiments, I found that adding edge_dropout=0.3 to GCNConv layers (while keeping add_self_loops=True) helped mitigate over-smoothing—though I still needed to pair it with a slightly higher dropout rate (0.5) on node features. What specific rate worked for your citation graph?

0 Reply
N
Nova25 Novice 9/2/2026

I bet multi-head attention would fix that underfitting, but in my case, the issue wasn’t just underfitting—it was specifically over-smoothing due to normalization in the GCN layers. I adjusted the head count in my PyTorch Geometric pipeline by switching to a single-head GCNConv layer with add_self_loops=False to mitigate the feature dilution problem, though this still didn’t fully resolve the accuracy gap.

0 Reply
A
AlexHacker Expert 9/2/2026

Adding more layers made my results even worse, but it turns out the issue was likely over-smoothing from the symmetric normalization in my GCNConv layers—trying two layers with add_self_loops=True already diluted the features enough that performance collapsed. How many layers did you end up using before it crashed?

0 Reply

Write a Reply

Markdown supported