def forward(self, x):
              x = self.linear(x)
              x = self.sub(x) + x
              return x
  # initialize a floating point model
  float_model = M().eval()

  # define calibration function
  def calibrate(model, data_loader):
      model.eval()
      with torch.no_grad():
          for image, target in data_loader:
              model(image)

  # qconfig is the configuration for how we insert observers for a particular
  # operator
  # qconfig = get_default_qconfig("fbgemm")
  # Example of customizing qconfig:
  # qconfig = torch.ao.quantization.QConfig(
  #    activation=MinMaxObserver.with_args(dtype=torch.qint8),
  #    weight=MinMaxObserver.with_args(dtype=torch.qint8))
  # `activation` and `weight` are constructors of observer module

  # qconfig_mapping is a collection of quantization configurations, user can
  # set the qconfig for each operator (torch op calls, functional calls, module calls)
