class_docstr: A helper model so we can manange models more easily. It contains net def
  and parameter storages. You can add an Operator yourself, e.g.
  
      model = model_helper.ModelHelper(name="train_net")
      # init your weight and bias as w and b
      w = model.param_init_net.XavierFill(...)
      b = model.param_init_net.ConstantFill(...)
      fc1 = model.FC([input, w, b], output, **kwargs)
  
  or you can use helper functions in brew module without manually
  defining parameter initializations and operators.
  
      model = model_helper.ModelHelper(name="train_net")
      fc1 = brew.fc(model, input, output, dim_in, dim_out, **kwargs)
docstr: Return param_init_net + net Net.
  Returns:
    'core.Net' containing param_init_net and net
code: def GetCompleteNet(self):
      r"""Return param_init_net + net Net.
      Returns:
        'core.Net' containing param_init_net and net
      """
      new_net = self.param_init_net.Clone(
          self.name + "_complete_net", keep_schema=True
      )
      # add init net info to debug info
      for op in new_net.Proto().op:
          op.debug_info = op.debug_info + "/param_init_net"
      new_net.AppendNet(self.net)
      # keep the execution optimization
      if self.net.Proto().HasField("type"):
          new_net.Proto().type = self.net.Proto().type
      return new_net
  
imports: from caffe2.python import core, scope, workspace
  from caffe2.python.helpers.db_input import db_input
  from caffe2.python.modeling import parameter_info
  from caffe2.python.modeling.parameter_sharing import parameter_sharing_context
  from caffe2.python.optimizer_context import OptimizerContext, DEFAULT_OPTIM
  from caffe2.python.regularizer_context import RegularizerContext
  from itertools import chain
  import logging
label_desc: Use image node_id 28 for calling the ModelHelper obj's underlying member method code with example usage: obj.GetCompleteNet() and returns: new_net