class_docstr: Model helper for building models on top of layers abstractions.
  
  Each layer is the abstraction that is higher level than Operator. Layer
  is responsible for ownership of it's own parameters and can easily be
  instantiated in multiple nets possible with different sets of ops.
  As an example: one can easily instantiate predict and train nets from
  the same set of layers, where predict net will have subset of the
  operators from train net.
class_docstr_tok: ["Model","helper","for","building","models","on","top","of","layers","abstractions",".","Each","layer","is","the","abstraction","that","is","higher","level","than","Operator",".","Layer","is","responsible","for","ownership","of","it","'s","own","parameters","and","can","easily","be","instantiated","in","multiple","nets","possible","with","different","sets","of","ops",".","As","an","example",":","one","can","easily","instantiate","predict","and","train","nets","from","the","same","set","of","layers",",","where","predict","net","will","have","subset","of","the","operators","from","train","net","."]
code: def create_param(
      self,
      param_name,
      shape,
      initializer,
      optimizer=None,
      ps_param=None,
      regularizer=None,
  ):
      if isinstance(param_name, core.BlobReference):
          param_name = str(param_name)
      elif isinstance(param_name, str):
          # Parameter name will be equal to current Namescope that got
          # resolved with the respect of parameter sharing of the scopes.
          param_name = parameter_sharing_context.get_parameter_name(
              param_name
          )
      else:
          raise ValueError("Unsupported type for param_name")
  
      param_blob = core.BlobReference(param_name)
  
      if len(initializer) == 1:
          init_op_args = {}
      else:
          assert len(initializer) == 2
          init_op_args = copy.deepcopy(initializer[1])
      if shape is not None:
          assert "shape" not in init_op_args
          init_op_args.update({"shape": shape})
  
      initializer_op = None
      if self._initialize_params:
          initializer_op = core.CreateOperator(
              initializer[0], [], param_blob, **init_op_args
          )
  
      param = layers.LayerParameter(
          parameter=param_blob,
          initializer=initializer_op,
          optimizer=optimizer,
          ps_param=ps_param,
          regularizer=regularizer,
      )
  
      self._validate_param_shape(param_name, shape)
  
      self._validate_param_optim(param_name, optimizer)
  
      self._param_to_shape[param_name] = shape
  
      return param
  
imports: from caffe2.python import core, model_helper, schema, scope, utils, muji
  from caffe2.python.modeling.parameter_info import ParameterInfo
  from caffe2.python.modeling.parameter_sharing import parameter_sharing_context
  from caffe2.python.modeling.net_modifier import NetModifier
  from caffe2.python.optimizer import get_param_device, Optimizer
  from caffe2.python.regularizer import Regularizer, RegularizationBy
  from caffe2.python.layers import layers
  import logging
  import numpy
  import copy
label_desc: Use image node_id 15 for calling the LayerModelHelper obj's underlying member method code with example usage: obj.create_param(param_name, shape, initializer, optimizer, ps_param, regularizer) and returns: param