pub struct QuantizationParams {
pub scale: f32,
pub zero_point: i32,
pub qmin: i8,
pub qmax: i8,
}Expand description
Quantization parameters for a tensor or tensor slice.
Defines the mapping between floating-point values and quantized integers:
- Symmetric:
x_q = round(x / scale) - Asymmetric:
x_q = round(x / scale) + zero_point
§Invariants
scale > 0.0(enforced at construction)qmin <= zero_point <= qmax- For symmetric mode:
zero_point == 0
Fields§
§scale: f32Scale factor for quantization. Maps FP32 range to INT8 range.
zero_point: i32Zero point for asymmetric quantization. Always 0 for symmetric quantization.
qmin: i8Minimum quantized value (typically -128 for i8).
qmax: i8Maximum quantized value (typically 127 for i8).
Implementations§
Source§impl QuantizationParams
impl QuantizationParams
Sourcepub fn from_minmax(
min_val: f32,
max_val: f32,
mode: QuantizationMode,
) -> CnnResult<Self>
pub fn from_minmax( min_val: f32, max_val: f32, mode: QuantizationMode, ) -> CnnResult<Self>
Create symmetric quantization parameters from min/max values.
Symmetric quantization uses zero_point = 0 and maps the range
[-max_abs, max_abs] to [-127, 127].
§Arguments
min_val- Minimum value in the FP32 tensormax_val- Maximum value in the FP32 tensor
§Returns
Quantization parameters with zero_point = 0.
§Example
let params = QuantizationParams::from_minmax(-10.0, 10.0, QuantizationMode::Symmetric);
assert_eq!(params.zero_point, 0);
assert!(params.scale > 0.0);Sourcepub fn from_percentile(
percentile_min: f32,
percentile_max: f32,
mode: QuantizationMode,
) -> CnnResult<Self>
pub fn from_percentile( percentile_min: f32, percentile_max: f32, mode: QuantizationMode, ) -> CnnResult<Self>
Create quantization parameters from percentile values.
Used during calibration to exclude outliers that would skew the quantization range. Typically uses 0.001 and 0.999 percentiles.
§Arguments
percentile_min- Lower percentile value (e.g., -10.0)percentile_max- Upper percentile value (e.g., 10.0)mode- Quantization mode (symmetric or asymmetric)
§Example
// Use 99.8% of the data range, excluding outliers
let params = QuantizationParams::from_percentile(
-9.5, 9.5, QuantizationMode::Symmetric
);Sourcepub fn validate(&self) -> CnnResult<()>
pub fn validate(&self) -> CnnResult<()>
Validate that the parameters satisfy invariants.
§Invariants
scale > 0.0qmin <= qmaxqmin <= zero_point <= qmax- For symmetric mode:
zero_point == 0
Sourcepub fn quantize_value(&self, value: f32) -> i8
pub fn quantize_value(&self, value: f32) -> i8
Quantize a single FP32 value to INT8.
Formula:
- Symmetric:
x_q = round(x / scale) - Asymmetric:
x_q = round(x / scale) + zero_point
Result is clamped to [qmin, qmax].
Sourcepub fn dequantize_value(&self, value: i8) -> f32
pub fn dequantize_value(&self, value: i8) -> f32
Dequantize a single INT8 value to FP32.
Formula:
- Symmetric:
x = x_q * scale - Asymmetric:
x = (x_q - zero_point) * scale
Trait Implementations§
Source§impl Clone for QuantizationParams
impl Clone for QuantizationParams
Source§fn clone(&self) -> QuantizationParams
fn clone(&self) -> QuantizationParams
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more