code: def forward(self, h):
      batch_size = h.shape[0]
      for conv, bn in zip(self.conv, self.bn):
          h = conv(h)
          h = bn(h)
          h = F.relu(h)
  
      h = self.maxpool(h).view(-1, self.pool_feat_len)
      for mlp, bn in zip(self.mlp2, self.bn2):
          h = mlp(h)
          h = bn(h)
          h = F.relu(h)
  
      out = self.mlp_out(h)
  
      iden = Variable(
          torch.from_numpy(
              np.eye(self.input_dims).flatten().astype(np.float32)
          )
      )
      iden = iden.view(1, self.input_dims * self.input_dims).repeat(
          batch_size, 1
      )
      if out.is_cuda:
          iden = iden.cuda()
      out = out + iden
      out = out.view(-1, self.input_dims, self.input_dims)
      return out
  
file_path: dgl/examples/pytorch/pointcloud/pointnet/pointnet_cls.py
imports: import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from torch.autograd import Variable
label_desc: Use image node_id 2 for calling the TransformNet obj's underlying member method code with example usage: obj.forward(h) and returns: out