class_docstr: Feature aggregation
class_docstr_tok: ["Feature","aggregation"]
code: def forward(self, nodes):
      shape = nodes.mailbox["agg_feat"].shape
      h = (
          nodes.mailbox["agg_feat"]
          .view(self.batch_size, -1, shape[1], shape[2])
          .permute(0, 3, 2, 1)
      )
      for conv, bn in zip(self.conv, self.bn):
          h = conv(h)
          h = bn(h)
          h = F.relu(h)
      h = torch.max(h, 2)[0]
      feat_dim = h.shape[1]
      h = h.permute(0, 2, 1).reshape(-1, feat_dim)
      return {"new_feat": h}
  
imports: import dgl
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.geometry import farthest_point_sampler
label_desc: Use image node_id 2 for calling the KNNConv obj's underlying member method code with example usage: obj.forward(nodes) and returns: dict