code: def feat_trans(
      self, features, idx
  ):  # linear transformation + activation + batch normalization
      h = self.lins[idx](features) + self.bias[idx]
  
      if self.act is not None:
          h = self.act(h)
  
      if self.batch_norm:
          mean = h.mean(dim=1).view(h.shape[0], 1)
          var = h.var(dim=1, unbiased=False).view(h.shape[0], 1) + 1e-9
          h = (h - mean) * self.scale[idx] * th.rsqrt(
              var
          ) + self.offset[idx]
  
      return h
  
file_path: dgl/examples/pytorch/graphsaint/modules.py
imports: import dgl.function
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 3 for calling the GCNLayer obj's underlying member method code with example usage: obj.feat_trans(features, idx) and returns: h