Hi, I’m pretty new to GNNs and PyTorch Geometric. I want to calculate the Dirichlet energy at each layer and plot them, so I can visualize the over-smoothing problem. I have looked into several ways to accomplish this, but none of them seem to work, as I have to compute the product between the features and graph Laplacian. I am not sure how to get the Laplacian when the hidden layer changes the dimension of the node features, as the dimensions of the new features and Laplacian computed off the edge_index would be completely different. Any tips pointing me in the right direction would be helpful!
I have a pretty standard GCN defined here:
class GCN(nn.Module): def __init__( self, n_hidden, n_features, n_classes, hidden_dim, dropout_rate, activation=F.relu, use_linear=False, ): super().__init__() self.n_hidden = n_hidden self.hidden_dim = hidden_dim self.activation = activation self.use_linear = use_linear self.in_conv = GCNConv(n_features, self.hidden_dim) self.hidden_convs = nn.ModuleList( [ GCNConv(self.hidden_dim, self.hidden_dim) for _ in range(self.n_hidden) ] ) self.out_conv = GCNConv(self.hidden_dim, n_classes) self.dropout = Dropout(dropout_rate) def forward(self, x, edge_index): x = self.dropout(x) x = self.activation(self.in_conv(x, edge_index)) for i in range(self.n_hidden): x = self.activation(self.hidden_convs[i](x, edge_index)) if self.use_linear: linear = Linear(self.hidden_dim, self.hidden_dim)(x) x = x + linear x = self.activation(self.out_conv(x, edge_index)) x = self.dropout(x)
I would also like to accomplish this with a GAT and GIN as well.