class_docstr: The :class:`QuanDense` class is a quantized fully connected layer with BN, which weights are 'bitW' bits and the output of the previous layer
  are 'bitA' bits while inferencing.
  
  Parameters
  ----------
  n_units : int
      The number of units of this layer.
  act : activation function
      The activation function of this layer.
  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).
  W_init : initializer
      The initializer for the weight matrix.
  b_init : initializer or None
      The initializer for the bias vector. If None, skip biases.
  in_channels: int
      The number of channels of the previous layer.
      If None, it will be automatically detected when the layer is forwarded for the first time.
  name : None or str
      A unique layer name.
code: def forward(self, inputs):
      inputs = quantize_active_overflow(inputs, self.bitA)
  
      W_ = quantize_weight_overflow(self.W, self.bitW)
  
      # outputs = tf.matmul(inputs, self.W)
      outputs = tf.matmul(inputs, W_)  # hao dong change to this
  
      if self.b_init is not None:
          outputs = tf.nn.bias_add(outputs, self.b, name="bias_add")
      if self.act:
          outputs = self.act(outputs)
      return outputs
  
file_path: TensorLayer/tensorlayer/layers/dense/quan_dense.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 4 for calling the QuanDense obj's underlying member method code with example usage: obj.forward(inputs) and returns: outputs