code: def conv_act_layer(from_layer, name, num_filter, kernel=(1,1), pad=(0,0), \
      stride=(1,1), act_type="relu", use_batchnorm=False):
      
      conv = mx.symbol.Convolution(data=from_layer, kernel=kernel, pad=pad, \
          stride=stride, num_filter=num_filter, name="{}_conv".format(name))
      if use_batchnorm:
          conv = mx.symbol.BatchNorm(data=conv, name="{}_bn".format(name))
      relu = mx.symbol.Activation(data=conv, act_type=act_type, \
          name="{}_{}".format(name, act_type))
      return 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