Source code for denspp.offline.dnn.training.ptq_help

import numpy as np
from torch import nn, Tensor, no_grad
from copy import deepcopy
from elasticai.creator.arithmetic import FxpParams, FxpArithmetic
from elasticai.creator.nn.fixed_point import MathOperations


[docs] def quantize_model_fxp(model: nn.Sequential, total_bits: int, frac_bits: int) -> nn.Module: """Function for quantizing all model parameters :param model: Torch model / Sequential to be quantized :param total_bits: Total number of bits :param frac_bits: Fraction of bits to quantize :return: Quantized model """ fxpmath = MathOperations(FxpArithmetic(FxpParams(total_bits=total_bits, frac_bits=frac_bits, signed=True))) model_quant = deepcopy(model) with no_grad(): for name, param in model_quant.named_parameters(): param.copy_(fxpmath.quantize(param)) return model_quant
[docs] def quantize_data_fxp(data: Tensor | np.ndarray, total_bits: int, frac_bits: int) -> Tensor: """Function for quantizing the data :param data: Tensor data to be quantized :param total_bits: Total number of bits :param frac_bits: Fraction of bits to quantize :return: Quantized Tensor data """ fxpmath = MathOperations(FxpArithmetic(FxpParams(total_bits=total_bits, frac_bits=frac_bits, signed=True))) data_used = data if isinstance(data, Tensor) else Tensor(data) return fxpmath.quantize(data_used)