MinMaxObserver¶

class torch.quantization.observer.MinMaxObserver(dtype=torch.quint8, qscheme=torch.per_tensor_affine, reduce_range=False, quant_min=None, quant_max=None, factory_kwargs=None, eps=1.1920928955078125e-07)[source]

Observer module for computing the quantization parameters based on the running min and max values.

This observer uses the tensor min/max statistics to compute the quantization parameters. The module records the running minimum and maximum of incoming tensors, and uses this statistic to compute the quantization parameters.

Parameters:
• dtype – dtype argument to the quantize node needed to implement the reference model spec.

• qscheme – Quantization scheme to be used

• reduce_range – Reduces the range of the quantized data type by 1 bit

• quant_min – Minimum quantization value. If unspecified, it will follow the 8-bit setup.

• quant_max – Maximum quantization value. If unspecified, it will follow the 8-bit setup.

• eps (Tensor) – Epsilon value for float32, Defaults to torch.finfo(torch.float32).eps.

Given running min/max as $x_\text{min}$ and $x_\text{max}$, scale $s$ and zero point $z$ are computed as:

The running minimum/maximum $x_\text{min/max}$ is computed as:

$\begin{array}{ll} x_\text{min} &= \begin{cases} \min(X) & \text{if~}x_\text{min} = \text{None} \\ \min\left(x_\text{min}, \min(X)\right) & \text{otherwise} \end{cases}\\ x_\text{max} &= \begin{cases} \max(X) & \text{if~}x_\text{max} = \text{None} \\ \max\left(x_\text{max}, \max(X)\right) & \text{otherwise} \end{cases}\\ \end{array}$

where $X$ is the observed tensor.

The scale $s$ and zero point $z$ are then computed as:

\begin{aligned} \text{if Symmetric:}&\\ &s = 2 \max(|x_\text{min}|, x_\text{max}) / \left( Q_\text{max} - Q_\text{min} \right) \\ &z = \begin{cases} 0 & \text{if dtype is qint8} \\ 128 & \text{otherwise} \end{cases}\\ \text{Otherwise:}&\\ &s = \left( x_\text{max} - x_\text{min} \right ) / \left( Q_\text{max} - Q_\text{min} \right ) \\ &z = Q_\text{min} - \text{round}(x_\text{min} / s) \end{aligned}

where $Q_\text{min}$ and $Q_\text{max}$ are the minimum and maximum of the quantized data type.

Warning

dtype can only take torch.qint8 or torch.quint8.

Note

If the running minimum equals to the running maximum, the scale and zero_point are set to 1.0 and 0.

calculate_qparams()[source]

Calculates the quantization parameters.

forward(x_orig)[source]

Records the running minimum and maximum of x.

reset_min_max_vals()[source]

Resets the min/max values.