class_docstr: Implementation of graph normalization
  
  Reference Paper: BENCHMARKING GRAPH NEURAL NETWORKS
  
  Each node features is divied by sqrt(num_nodes) per graphs.
class_docstr_tok: ["Implementation","of","graph","normalization","Reference","Paper",":","BENCHMARKING","GRAPH","NEURAL","NETWORKS","Each","node","features","is","divied","by","sqrt","(","num_nodes",")","per","graphs","."]
docstr: Forward function of GraphNorm
  
  Args:
      graph: the graph object from (:code:`Graph`)
  
      feature: A tensor with shape (num_nodes, feature_size).
  
  Return:
      A tensor with shape (num_nodes, hidden_size)
docstr_tok: ["Forward","function","of","GraphNorm","Args",":","graph",":","the","graph","object","from","(",":","code",":","`","Graph","`",")","feature",":","A","tensor","with","shape","(","num_nodes",",","feature_size",")",".","Return",":","A","tensor","with","shape","(","num_nodes",",","hidden_size",")"]
code: def forward(self, graph, feature):
      """Forward function of GraphNorm
  
      Args:
          graph: the graph object from (:code:`Graph`)
  
          feature: A tensor with shape (num_nodes, feature_size).
  
      Return:
          A tensor with shape (num_nodes, hidden_size)
      """
      nodes = paddle.ones(shape=[graph.num_nodes, 1], dtype="float32")
      norm = self.graph_pool(graph, nodes)
      norm = paddle.sqrt(norm)
      norm = paddle.gather(norm, graph.graph_node_id)
      return feature / norm
  
imports: import warnings
  import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import pgl
  from pgl.math import segment_sum, segment_softmax, segment_topk, segment_pool
  from pgl.utils.transform import filter_adj
label_desc: Use image node_id 2 for calling the GraphNorm obj's underlying member method code with example usage: obj.forward(graph, feature) and returns: unknown