code: def forward(self, g, node_feat, edge_feat):
      # Encode node and edge feature.
      hv = self.node_encoder(node_feat)
      he = self.edge_encoder(edge_feat)
  
      # GatedGCNConv layers.
      for layer in self.layers:
          hv, he = layer(g, hv, he)
  
      # Output project.
      h_g = self.pooling(g, hv)
  
      return self.output(h_g)
  
file_path: dgl/examples/core/gated_gcn/train.py
imports: import argparse
  import time
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from dgl.dataloading import GraphDataLoader
  from dgl.nn.pytorch import GatedGCNConv
  from dgl.nn.pytorch.glob import AvgPooling
  from ogb.graphproppred import DglGraphPropPredDataset, Evaluator
  from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder
label_desc: Use image node_id 2 for calling the GatedGCN obj's underlying member method code with example usage: obj.forward(g, node_feat, edge_feat) and returns: self