code: def msg_norm(x, msg, name):
      """Implementation of message normalization, see more information in the paper
      "DeeperGCN: All You Need to Train Deeper GCNs"
      (https://arxiv.org/pdf/2006.07739.pdf)
  
      Args:
          x: centre node feature (num_nodes, feature_size)
          msg: neighbor node feature (num_nodes, feature_size)
          name: name for s
  
      Return:
          An output tensor with shape (num_nodes, feature_size)
      """
      s = L.create_parameter(
          shape=[1],
          dtype="float32",
          default_initializer=fluid.initializer.ConstantInitializer(
              value=1.0
          ),
          name=name + "_s_msg_norm",
      )
  
      msg = L.l2_normalize(msg, axis=1)
      x_norm = L.reduce_sum(x * x, dim=1, keep_dim=True)
      x_norm = L.sqrt(x_norm)
      msg = msg * x_norm * s
      return msg
  
file_path: PGL/legacy/pgl/message_passing.py
imports: import numpy
  import paddle
  import paddle.fluid
  import paddle.fluid.layers
  from pgl.utils import paddle_helper
label_desc: Use image node_id 12 for calling a global function with example usage: msg_norm(x, msg, name) and returns: msg