Source code for gammagl.models.mixhop

import tensorlayerx as tlx
from ..layers.conv import MixHopConv


[docs] class MixHopModel(tlx.nn.Module): r"""MixHop proposed in `"MixHop: Higher-Order Graph Convolutional Architectures via Sparsified Neighborhood Mixing" <https://arxiv.org/abs/1905.00067>`_ paper. Parameters ---------- feature_dim: int input feature dimension. hidden_dim: int hidden dimension. out_dim: int The number of classes for prediction. p: list The list of integer adjacency powers. drop_rate: float dropout rate. num_layers: int, optional Number of Mixhop Graph Convolutional Layers. norm: str, optional apply the normalizer. name: str, optional model name. """ def __init__(self, feature_dim, hidden_dim, out_dim, p, drop_rate, num_layers=3, norm='both', name=None): super(MixHopModel, self).__init__(name=name) self.feature_dim = feature_dim self.hidden_dim = hidden_dim self.out_dim = out_dim self.num_layers = num_layers self.p = p self.drop_rate = drop_rate self.dropout = tlx.layers.Dropout(self.drop_rate) self.relu = tlx.ReLU() # Input layer self.layer_head = MixHopConv(in_channels=self.feature_dim, out_channels=self.hidden_dim, p=self.p, norm=norm) self.layers_list = [] for i in range(1, self.num_layers - 1): self.layers_list.append( MixHopConv(in_channels=self.hidden_dim * len(p), out_channels=self.hidden_dim, p=self.p, norm=norm)) self.layers = tlx.nn.ModuleList(self.layers_list) W_initor = tlx.initializers.XavierUniform() self.fc_layers = tlx.layers.Linear(in_features=self.hidden_dim * len(self.p), W_init=W_initor, out_features=self.out_dim)
[docs] def forward(self, x, edge_index, edge_weight, num_nodes=None): x = self.layer_head(self.dropout(x), edge_index, num_nodes=num_nodes) x = self.relu(x) for i in range(len(self.layers_list)): x = self.dropout(x) x = self.layers_list[i](x, edge_index, edge_weight, num_nodes) x = self.relu(x) x = self.fc_layers(x) return x