class_docstr: Convolutional layer
  Input:
  - input_record: at least has the shape info of C (num_channels)
  - output_dim: number of convolutional filters
  - kernel_h, kernel_w: kernel size for h and w
  - stride_h, stride_w: stride for h and w
  - pad_b, pad_l, pad_r, pad_t: padding sizes, if stride == 1,
                                'None' value will do auto padding
  - order: either 'NHWC' or 'NCHW'
code: def add_ops(self, net):
      net.Conv(
          self.input_record.field_blobs() + [self.kernel, self.bias],
          self.output_schema.field_blobs(),
          kernel_h=self.kernel_h,
          kernel_w=self.kernel_w,
          stride_h=self.stride_h,
          stride_w=self.stride_w,
          pad_t=self.pad_t,
          pad_l=self.pad_l,
          pad_b=self.pad_b,
          pad_r=self.pad_r,
          order=self.order,
      )
  
imports: from caffe2.python import schema
  from caffe2.python.layers.layers import ModelLayer
  import numpy
label_desc: Use image node_id 2 for calling the Conv obj's underlying member method code with example usage: obj.add_ops(net) without return types