Source code for gammagl.models.film

import tensorlayerx as tlx
from gammagl.layers.conv.film_conv import FILMConv


[docs] class FILMModel(tlx.nn.Module): r"""The FiLM graph convolutional operator from the `"GNN-FiLM: Graph Neural Networks with Feature-wise Linear Modulation" <https://arxiv.org/abs/1906.12192>`_ paper. Parameters ---------- in_channels: int, tuple Size of each input sample, or :obj:`-1` to derive the size from the first input(s) to the forward method. A tuple corresponds to the sizes of source and target dimensionalities. hidden_dim: int Size of each hidden layers sample. out_channels: int Size of each output sample. drop_rate: float Rate of dropout layers. name: str, optional Name of the model. """ def __init__(self, in_channels, hidden_dim, out_channels, num_layers, drop_rate, name=None): super(FILMModel, self).__init__(name=name) self.convs = tlx.nn.ModuleList() self.convs.append(FILMConv(in_channels=in_channels, out_channels=hidden_dim)) for _ in range(num_layers - 2): self.convs.append(FILMConv(in_channels=hidden_dim, out_channels=hidden_dim)) self.convs.append(FILMConv(in_channels=hidden_dim, out_channels=out_channels, act=None)) self.norms = tlx.nn.ModuleList() for _ in range(num_layers - 1): self.norms.append(tlx.nn.BatchNorm1d(num_features=hidden_dim, momentum=0.1,gamma_init='ones')) self.dropout = tlx.nn.Dropout(drop_rate)
[docs] def forward(self, x, edge_index): for conv, norm in zip(self.convs[:-1], self.norms): x = conv(x, edge_index) x = norm(x) x = self.dropout(x) x = self.convs[-1](x, edge_index) return x