Source code for gammagl.models.gcnii

import math
import tensorlayerx as tlx
from gammagl.layers.conv import GCNIIConv


[docs] class GCNIIModel(tlx.nn.Module): """The graph convolutional operator with initial residual connections and identity mapping (GCNII) from the `"Simple and Deep Graph Convolutional Networks" <https://arxiv.org/abs/2007.02133>`_ paper. """ def __init__(self, feature_dim, hidden_dim, num_class, num_layers, alpha, beta, lambd, variant, drop_rate, name=None): super().__init__(name=name) self.linear_head = tlx.layers.Linear(out_features=hidden_dim, in_features=feature_dim, b_init=None) self.linear_tail = tlx.layers.Linear(in_features=hidden_dim, out_features=num_class, b_init=None) self.convs = tlx.nn.ModuleList([]) for i in range(1, num_layers + 1): # beta = lambd / i if variant else beta beta = math.log(lambd / i + 1) if variant else beta self.convs.append(GCNIIConv(hidden_dim, hidden_dim, alpha, beta, variant)) self.relu = tlx.ReLU() self.dropout = tlx.layers.Dropout(drop_rate)
[docs] def forward(self, x, edge_index, edge_weight, num_nodes): x0 = x = self.relu(self.linear_head(self.dropout(x))) for conv in self.convs: x = self.dropout(x) x = conv(x0, x, edge_index, edge_weight, num_nodes) x = self.relu(x) x = self.relu(self.linear_tail(self.dropout(x))) return x