class_docstr: The P(ropagational)MLP model from the `"Graph Neural Networks are
  Inherently Good Generalizers: Insights by Bridging GNNs and MLPs"
  <https://arxiv.org/abs/2212.09034>`_ paper.
  :class:`PMLP` is identical to a standard MLP during training, but then
  adopts a GNN architecture during testing.
  
  Args:
      in_channels (int): Size of each input sample.
      hidden_channels (int): Size of each hidden sample.
      out_channels (int): Size of each output sample.
      num_layers (int): The number of layers.
      dropout (float, optional): Dropout probability of each hidden
          embedding. (default: :obj:`0.`)
      norm (bool, optional): If set to :obj:`False`, will not apply batch
          normalization. (default: :obj:`True`)
      bias (bool, optional): If set to :obj:`False`, the module
          will not learn additive biases. (default: :obj:`True`)
class_docstr_tok: ["The","P","(","ropagational",")","MLP","model","from","the","`","``","Graph","Neural","Networks","are","Inherently","Good","Generalizers",":","Insights","by","Bridging","GNNs","and","MLPs","''","<","https",":","\/\/arxiv.org\/abs\/2212.09034",">","`","_","paper",".",":","class",":","`","PMLP","`","is","identical","to","a","standard","MLP","during","training",",","but","then","adopts","a","GNN","architecture","during","testing",".","Args",":","in_channels","(","int",")",":","Size","of","each","input","sample",".","hidden_channels","(","int",")",":","Size","of","each","hidden","sample",".","out_channels","(","int",")",":","Size","of","each","output","sample",".","num_layers","(","int",")",":","The","number","of","layers",".","dropout","(","float",",","optional",")",":","Dropout","probability","of","each","hidden","embedding",".","(","default",":",":","obj",":","`","0.","`",")","norm","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","will","not","apply","batch","normalization",".","(","default",":",":","obj",":","`","True","`",")","bias","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","the","module","will","not","learn","additive","biases",".","(","default",":",":","obj",":","`","True","`",")"]
code: def __repr__(self) -> str:
      return (
          f"{self.__class__.__name__}({self.in_channels}, "
          f"{self.out_channels}, num_layers={self.num_layers})"
      )
  
file_path: pytorch_geometric/torch_geometric/nn/models/pmlp.py
imports: from typing import Optional
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch_geometric.nn import SimpleConv
  from torch_geometric.nn.dense.linear import Linear
label_desc: Use image node_id 4 for calling the PMLP obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str, self, str, self, str