class_docstr: The :class:`QuanConv2d` class is a quantized convolutional layer without BN, which weights are 'bitW' bits and the output of the previous layer
  are 'bitA' bits while inferencing.
  Note that, the bias vector would not be binarized.
  
  Parameters
  ----------
  With TensorLayer
  
  n_filter : int
      The number of filters.
  filter_size : tuple of int
      The filter size (height, width).
  strides : tuple of int
      The sliding window strides of corresponding input dimensions.
      It must be in the same order as the ``shape`` parameter.
  act : activation function
      The activation function of this layer.
  padding : str
      The padding algorithm type: "SAME" or "VALID".
  bitW : int
      The bits of this layer's parameter
  bitA : int
      The bits of the output of previous layer
  use_gemm : boolean
      If True, use gemm instead of ``tf.matmul`` for inference.
      TODO: support gemm
  data_format : str
      "channels_last" (NHWC, default) or "channels_first" (NCHW).
  dilation_rate : tuple of int
      Specifying the dilation rate to use for dilated convolution.
  W_init : initializer
      The initializer for the the weight matrix.
  b_init : initializer or None
      The initializer for the the bias vector. If None, skip biases.
  in_channels : int
      The number of in channels.
  name : None or str
      A unique layer name.
  
  Examples
  ---------
  With TensorLayer
  
  >>> net = tl.layers.Input([8, 12, 12, 64], name='input')
  >>> quanconv2d = tl.layers.QuanConv2d(
  ...     n_filter=32, filter_size=(5, 5), strides=(1, 1), act=tf.nn.relu, padding='SAME', name='quancnn2d'
  ... )(net)
  >>> print(quanconv2d)
  >>> output shape : (8, 12, 12, 32)
code: def __repr__(self):
      actstr = (
          self.act.__name__ if self.act is not None else "No Activation"
      )
      s = (
          "{classname}(in_channels={in_channels}, out_channels={n_filter}, kernel_size={filter_size}"
          ", strides={strides}, padding={padding}"
      )
      if self.dilation_rate != (1,) * len(self.dilation_rate):
          s += ", dilation={dilation_rate}"
      if self.b_init is None:
          s += ", bias=False"
      s += ", " + actstr
      if self.name is not None:
          s += ", name='{name}'"
      s += ")"
      return s.format(
          classname=self.__class__.__name__, **self.__dict__
      )
  
file_path: TensorLayer/tensorlayer/layers/convolution/quan_conv.py
imports: import tensorflow
  import tensorlayer
  from tensorlayer import logging
  from tensorlayer.decorators import deprecated_alias
  from tensorlayer.layers.core import Layer
  from tensorlayer.layers.utils import quantize_active_overflow, quantize_weight_overflow
label_desc: Use image node_id 2 for calling the QuanConv2d obj's underlying member method code with example usage: obj.__repr__() and returns: s