滑动平均最小最大观察者
- classtorch.ao.quantization.observer.MovingAverageMinMaxObserver(averaging_constant=0.01, dtype=torch.quint8, qscheme=torch.per_tensor_affine, reduce_range=False, quant_min=None, quant_max=None, eps=1.1920928955078125e-07, is_dynamic=False, **kwargs)[源代码]
-
一个用于根据最小值和最大值的滑动平均值来计算量化参数的观察模块。
此观察器根据输入张量最小值和最大值的滑动平均值来计算量化参数。该模块记录输入张量的平均最小值和最大值,并利用这些统计数据来计算量化参数。
- 参数
-
-
averaging_constant - 用于计算最小值和最大值的平均常数。
-
dtype – 实现参考模型规范所需,在量化节点中的dtype参数。
-
qscheme – 用于指定的量化方案
-
reduce_range - 将量化数据类型的范围减少一位
-
quant_min - 最小量化值。若未指定,则默认采用8位设置。
-
quant_max – 最大量化值。若未指定,默认采用8位设置。
-
eps (Tensor) – 表示浮点数
的 epsilon 值,默认为 torch.finfo(torch.float32).eps。
-
移动平均最小值和最大值的计算方法如下:
$\begin{array}{ll} x_\text{min} = \begin{cases} \min(X) & \text{if~}x_\text{min} = \text{None} \\ (1 - c) x_\text{min} + c \min(X) & \text{otherwise} \end{cases}\\ x_\text{max} = \begin{cases} \max(X) & \text{if~}x_\text{max} = \text{None} \\ (1 - c) x_\text{max} + c \max(X) & \text{otherwise} \end{cases}\\ \end{array}$其中$x_\text{min/max}$ 表示运行中的平均最小值和最大值,$X$ 是输入的张量,而$c$ 代表
averaging_constant
。尺度和零点的计算方法与
MinMaxObserver
中的一样。注意
仅与
torch.per_tensor_affine
量化方案配合使用。注意
如果运行中的最小值等于最大值,那么 scale 和 zero_point 分别会被设置为 1.0 和 0。