class_docstr: Head of GNN, graph prediction
  
  The optional post_mp layer (specified by cfg.gnn.post_mp) is used
  to transform the pooled embedding using an MLP.
class_docstr_tok: ["Head","of","GNN",",","graph","prediction","The","optional","post_mp","layer","(","specified","by","cfg.gnn.post_mp",")","is","used","to","transform","the","pooled","embedding","using","an","MLP","."]
code: def __init__(self, dim_in, dim_out):
      super(GNNGraphHead, self).__init__()
      # todo: PostMP before or after global pooling
      self.layer_post_mp = MLP(
          dim_in, dim_out, num_layers=cfg.gnn.layers_post_mp, bias=True
      )
      self.pooling_fun = pooling_dict[cfg.model.graph_pooling]
  
imports: import torch
  import torch.nn
  import graphgym.register
  from graphgym.config import cfg
  from graphgym.models.layer import MLP
  from graphgym.models.pooling import pooling_dict
label_desc: Use image node_id 1 to create a new GNNGraphHead object from inherited base classes: nn with example: obj = GNNGraphHead(dim_in, dim_out)