code: def cgcnn_train():
      input_layer = Input(shape=(BATCH_SIZE, M_0 * IN_F))
  
      # === First layer===
      output = Mask_layer(
          in_channels=IN_JOINTS * IN_F,
          out_channels=IN_JOINTS * F,
          name=["w1", "b1"],
      )(input_layer)
  
      output = batch_normalization_warp(output)
      output = Dropout(keep=0.8)(output)
  
      # === Create multiple bi-linear layers ===
      for idx in range(NUM_LAYERS):
          output = two_linear_train(output, idx)
  
      # === Last layer ===
      input_size4 = int(output.get_shape()[1])
      output = Mask_layer(
          in_channels=input_size4,
          out_channels=OUT_JOINTS * 3,
          name=["w4", "b4"],
      )(output)
  
      # === End linear model ===
      output = End_layer()([input_layer, output])
  
      network = Model(inputs=input_layer, outputs=output)
  
      return network
  
imports: import numpy
  import tensorflow
  from tensorlayer.layers import Layer, Dropout, Dense, Input, BatchNorm, Reshape, Elementwise
  from tensorlayer.models import Model
  from tensorlayer import logging
  from .common import mask_weight, neighbour_matrix
label_desc: Use image node_id 3 for calling a global function with example usage: cgcnn_train() and returns: network