code: def legacy_conv_act_layer(from_layer, name, num_filter, kernel=(1,1), pad=(0,0), \
      stride=(1,1), act_type="relu", use_batchnorm=False):
      
      assert not use_batchnorm, "batchnorm not yet supported"
      bias = mx.symbol.Variable(name="conv{}_bias".format(name),
          init=mx.init.Constant(0.0), attr={'__lr_mult__': '2.0'})
      conv = mx.symbol.Convolution(data=from_layer, bias=bias, kernel=kernel, pad=pad, \
          stride=stride, num_filter=num_filter, name="conv{}".format(name))
      relu = mx.symbol.Activation(data=conv, act_type=act_type, \
          name="{}{}".format(act_type, name))
      if use_batchnorm:
          relu = mx.symbol.BatchNorm(data=relu, name="bn{}".format(name))
      return conv, relu
docs: wrapper for a small Convolution group
  
      Parameters:
      ----------
      from_layer : mx.symbol
          continue on which layer
      name : str
          base name of the new layers
      num_filter : int
          how many filters to use in Convolution layer
      kernel : tuple (int, int)
          kernel size (h, w)
      pad : tuple (int, int)
          padding size (h, w)
      stride : tuple (int, int)
          stride size (h, w)
      act_type : str
          activation type, can be relu...
      use_batchnorm : bool
          whether to use batch normalization
  
      Returns:
      ----------
      (conv, relu) mx.Symbols