code: def concat_data(self, net):
      reshaped = [
          net.NextScopedBlob("reshaped_data_%d" % i)
          for i in range(self.num)
      ]
      # coerce shape for single real values
      for i in range(self.num):
          net.Reshape(
              [self.data[i]],
              [reshaped[i], net.NextScopedBlob("new_shape_%d" % i)],
              shape=[1],
          )
      concated = net.NextScopedBlob("concated_data")
      net.Concat(
          reshaped,
          [concated, net.NextScopedBlob("concated_new_shape")],
          axis=0,
      )
      return concated
  
file_path: pytorch/caffe2/python/layers/adaptive_weight.py
imports: import numpy
  from caffe2.python import core, schema
  from caffe2.python.layers.layers import ModelLayer
  from caffe2.python.regularizer import BoundedGradientProjection, LogBarrier
label_desc: Use image node_id 2 for calling the AdaptiveWeight obj's underlying member method code with example usage: obj.concat_data(net) and returns: concated