Source code for gammagl.models.fagcn

# !/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File   :  fagcn.py
@Time   :  2022/5/10 11:02
@Author :  Ma Zeyao
"""

import tensorlayerx.nn as nn
from gammagl.layers.conv.fagcn_conv import FAGCNConv


[docs] class FAGCNModel(nn.Module): r"""The Frequency Adaptive Graph Convolution operator from the `"Beyond Low-Frequency Information in Graph Convolutional Networks" <https://arxiv.org/abs/2101.00797>`_ paper. Parameters ---------- feature_dim: int Dimension of feature vector in original input. hidden_dim: int Dimension of feature vector in FAGCN. num_class: int Dimension of feature vector in forward output. drop_rate: float Dropout rate. eps: float Epsilon parameter in paper. num_layers: int Number of Frequency Adaptation Graph Convolutional Layers. name: str, optional Name of the model. """ def __init__(self, feature_dim, hidden_dim, num_class, drop_rate, eps, num_layers, name=None): super().__init__(name=name) self.drop_rate = drop_rate self.eps = eps self.num_layers = num_layers self.relu = nn.ReLU() self.dropout = nn.Dropout(drop_rate) self.mid_layers = nn.Sequential() for i in range(num_layers): self.mid_layers.append(FAGCNConv(hidden_dim=hidden_dim, drop_rate=drop_rate)) init = nn.initializers.XavierNormal(gain=1.414) self.first_layer = nn.Linear(in_features=feature_dim, out_features=hidden_dim, W_init=init) self.last_layer = nn.Linear(in_features=hidden_dim, out_features=num_class, W_init=init)
[docs] def forward(self, x, edge_index, edge_weight, num_nodes): x = self.dropout(x) x = self.relu(self.first_layer(x)) x = self.dropout(x) x_0 = x for i in range(self.num_layers): x = self.mid_layers[i](x, edge_index, edge_weight, num_nodes) x = self.eps * x_0 + x x = self.last_layer(x) return x