forked from mindspore-Ecosystem/mindspore
!7834 rename create_quant_config && add notes
Merge pull request !7834 from yuchaojie/quant
This commit is contained in:
commit
40cfca781a
|
@ -33,7 +33,7 @@ from ..common import QuantDtype
|
||||||
from .quantizer import Quantizer, OptimizeOption
|
from .quantizer import Quantizer, OptimizeOption
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["QuantizationAwareTraining"]
|
__all__ = ["QuantizationAwareTraining", "create_quant_config"]
|
||||||
|
|
||||||
|
|
||||||
_ACTIVATION_MAP = {nn.ReLU: quant.ActQuant,
|
_ACTIVATION_MAP = {nn.ReLU: quant.ActQuant,
|
||||||
|
@ -44,13 +44,12 @@ _ACTIVATION_MAP = {nn.ReLU: quant.ActQuant,
|
||||||
nn.HSwish: quant.HSwishQuant}
|
nn.HSwish: quant.HSwishQuant}
|
||||||
|
|
||||||
|
|
||||||
def get_quant_config(quant_observer=(quant.FakeQuantWithMinMaxObserver, quant.FakeQuantWithMinMaxObserver),
|
def create_quant_config(quant_observer=(quant.FakeQuantWithMinMaxObserver, quant.FakeQuantWithMinMaxObserver),
|
||||||
quant_delay=(0, 0),
|
quant_delay=(0, 0),
|
||||||
quant_dtype=(QuantDtype.INT8, QuantDtype.INT8),
|
quant_dtype=(QuantDtype.INT8, QuantDtype.INT8),
|
||||||
per_channel=(False, False),
|
per_channel=(False, False),
|
||||||
symmetric=(False, False),
|
symmetric=(False, False),
|
||||||
narrow_range=(False, False)
|
narrow_range=(False, False)):
|
||||||
):
|
|
||||||
r"""
|
r"""
|
||||||
Configs the oberser type of weights and data flow with quant params.
|
Configs the oberser type of weights and data flow with quant params.
|
||||||
|
|
||||||
|
@ -78,7 +77,7 @@ def get_quant_config(quant_observer=(quant.FakeQuantWithMinMaxObserver, quant.Fa
|
||||||
weight_observer = quant_observer[0].partial_init(quant_delay=quant_delay[0], quant_dtype=quant_dtype[0],
|
weight_observer = quant_observer[0].partial_init(quant_delay=quant_delay[0], quant_dtype=quant_dtype[0],
|
||||||
per_channel=per_channel[0], symmetric=symmetric[0],
|
per_channel=per_channel[0], symmetric=symmetric[0],
|
||||||
narrow_range=narrow_range[0])
|
narrow_range=narrow_range[0])
|
||||||
act_observer = quant_observer[0].partial_init(quant_delay=quant_delay[-1], quant_dtype=quant_dtype[-1],
|
act_observer = quant_observer[-1].partial_init(quant_delay=quant_delay[-1], quant_dtype=quant_dtype[-1],
|
||||||
per_channel=per_channel[-1], symmetric=symmetric[-1],
|
per_channel=per_channel[-1], symmetric=symmetric[-1],
|
||||||
narrow_range=narrow_range[-1])
|
narrow_range=narrow_range[-1])
|
||||||
return quant.QuantConfig(weight=weight_observer, activation=act_observer)
|
return quant.QuantConfig(weight=weight_observer, activation=act_observer)
|
||||||
|
@ -221,7 +220,7 @@ class QuantizationAwareTraining(Quantizer):
|
||||||
self.act_range = Validator.check_bool(narrow_range[-1], "narrow range")
|
self.act_range = Validator.check_bool(narrow_range[-1], "narrow range")
|
||||||
self._convert_method_map = {quant.Conv2dBnAct: self._convert_conv,
|
self._convert_method_map = {quant.Conv2dBnAct: self._convert_conv,
|
||||||
quant.DenseBnAct: self._convert_dense}
|
quant.DenseBnAct: self._convert_dense}
|
||||||
self.quant_config = get_quant_config(quant_delay=quant_delay,
|
self.quant_config = create_quant_config(quant_delay=quant_delay,
|
||||||
quant_dtype=quant_dtype,
|
quant_dtype=quant_dtype,
|
||||||
per_channel=per_channel,
|
per_channel=per_channel,
|
||||||
symmetric=symmetric,
|
symmetric=symmetric,
|
||||||
|
|
|
@ -322,7 +322,7 @@ def _partial_init(cls_or_self, **kwargs):
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
class Observer(Cell):
|
class _Observer(Cell):
|
||||||
"""
|
"""
|
||||||
Base class of Observer. Observer is used to calculate the statistics of specific layer.
|
Base class of Observer. Observer is used to calculate the statistics of specific layer.
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ class Observer(Cell):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, quant_dtype):
|
def __init__(self, quant_dtype):
|
||||||
super(Observer, self).__init__()
|
super(_Observer, self).__init__()
|
||||||
self.quant_dtype = quant_dtype
|
self.quant_dtype = quant_dtype
|
||||||
|
|
||||||
def extend_repr(self):
|
def extend_repr(self):
|
||||||
|
@ -347,7 +347,7 @@ class Observer(Cell):
|
||||||
partial_init = classmethod(_partial_init)
|
partial_init = classmethod(_partial_init)
|
||||||
|
|
||||||
|
|
||||||
class UniformQuantObserver(Observer):
|
class UniformQuantObserver(_Observer):
|
||||||
"""
|
"""
|
||||||
The base class of Uniform Quantization Observer.
|
The base class of Uniform Quantization Observer.
|
||||||
|
|
||||||
|
@ -542,7 +542,8 @@ class Conv2dBnFoldQuant(Cell):
|
||||||
var_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the
|
var_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the
|
||||||
variance vector. Default: 'ones'.
|
variance vector. Default: 'ones'.
|
||||||
fake (bool): Whether Conv2dBnFoldQuant Cell adds FakeQuantWithMinMaxObserver. Default: True.
|
fake (bool): Whether Conv2dBnFoldQuant Cell adds FakeQuantWithMinMaxObserver. Default: True.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
freeze_bn (int): The quantization freeze BatchNormal op is according to the global step. Default: 100000.
|
freeze_bn (int): The quantization freeze BatchNormal op is according to the global step. Default: 100000.
|
||||||
|
|
||||||
|
@ -553,7 +554,9 @@ class Conv2dBnFoldQuant(Cell):
|
||||||
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> conv2d_bnfold = nn.Conv2dBnFoldQuant(1, 6, kernel_size=(2, 2), stride=(1, 1), pad_mode="valid")
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> conv2d_bnfold = nn.Conv2dBnFoldQuant(1, 6, kernel_size=(2, 2), stride=(1, 1), pad_mode="valid",
|
||||||
|
>>> quant_config=qconfig)
|
||||||
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mindspore.float32)
|
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mindspore.float32)
|
||||||
>>> result = conv2d_bnfold(input)
|
>>> result = conv2d_bnfold(input)
|
||||||
>>> result.shape
|
>>> result.shape
|
||||||
|
@ -725,7 +728,8 @@ class Conv2dBnWithoutFoldQuant(Cell):
|
||||||
weight_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the convolution kernel.
|
weight_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the convolution kernel.
|
||||||
Default: 'normal'.
|
Default: 'normal'.
|
||||||
bias_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the bias vector. Default: 'zeros'.
|
bias_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the bias vector. Default: 'zeros'.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -735,7 +739,9 @@ class Conv2dBnWithoutFoldQuant(Cell):
|
||||||
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> conv2d_no_bnfold = nn.Conv2dBnWithoutFoldQuant(1, 6, kernel_size=(2, 2), stride=(1, 1), pad_mode="valid")
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> conv2d_no_bnfold = nn.Conv2dBnWithoutFoldQuant(1, 6, kernel_size=(2, 2), stride=(1, 1), pad_mode="valid",
|
||||||
|
>>> quant_config=qconfig)
|
||||||
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mstype.float32)
|
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mstype.float32)
|
||||||
>>> result = conv2d_no_bnfold(input)
|
>>> result = conv2d_no_bnfold(input)
|
||||||
>>> result.shape
|
>>> result.shape
|
||||||
|
@ -846,7 +852,8 @@ class Conv2dQuant(Cell):
|
||||||
weight_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the convolution kernel.
|
weight_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the convolution kernel.
|
||||||
Default: 'normal'.
|
Default: 'normal'.
|
||||||
bias_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the bias vector. Default: 'zeros'.
|
bias_init (Union[Tensor, str, Initializer, numbers.Number]): Initializer for the bias vector. Default: 'zeros'.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -856,7 +863,9 @@ class Conv2dQuant(Cell):
|
||||||
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> conv2d_quant = nn.Conv2dQuant(1, 6, kernel_size= (2, 2), stride=(1, 1), pad_mode="valid")
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> conv2d_quant = nn.Conv2dQuant(1, 6, kernel_size= (2, 2), stride=(1, 1), pad_mode="valid",
|
||||||
|
>>> quant_config=qconfig)
|
||||||
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mindspore.float32)
|
>>> input = Tensor(np.random.randint(-2, 2, (2, 1, 3, 3)), mindspore.float32)
|
||||||
>>> result = conv2d_quant(input)
|
>>> result = conv2d_quant(input)
|
||||||
>>> result.shape
|
>>> result.shape
|
||||||
|
@ -947,7 +956,8 @@ class DenseQuant(Cell):
|
||||||
has_bias (bool): Specifies whether the layer uses a bias vector. Default: True.
|
has_bias (bool): Specifies whether the layer uses a bias vector. Default: True.
|
||||||
activation (Union[str, Cell, Primitive]): The regularization function applied to the output of the layer,
|
activation (Union[str, Cell, Primitive]): The regularization function applied to the output of the layer,
|
||||||
eg. 'relu'. Default: None.
|
eg. 'relu'. Default: None.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -957,7 +967,8 @@ class DenseQuant(Cell):
|
||||||
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
Tensor of shape :math:`(N, C_{out}, H_{out}, W_{out})`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> dense_quant = nn.DenseQuant(3, 6)
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> dense_quant = nn.DenseQuant(3, 6, quant_config=qconfig)
|
||||||
>>> input = Tensor(np.random.randint(-2, 2, (2, 3)), mindspore.float32)
|
>>> input = Tensor(np.random.randint(-2, 2, (2, 3)), mindspore.float32)
|
||||||
>>> result = dense_quant(input)
|
>>> result = dense_quant(input)
|
||||||
>>> result.shape
|
>>> result.shape
|
||||||
|
@ -1048,7 +1059,8 @@ class ActQuant(_QuantActivation):
|
||||||
Args:
|
Args:
|
||||||
activation (Cell): Activation cell class.
|
activation (Cell): Activation cell class.
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1058,7 +1070,8 @@ class ActQuant(_QuantActivation):
|
||||||
Tensor, with the same type and shape as the `input`.
|
Tensor, with the same type and shape as the `input`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> act_quant = nn.ActQuant(nn.ReLU())
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> act_quant = nn.ActQuant(nn.ReLU(), quant_config=qconfig)
|
||||||
>>> input = Tensor(np.array([[1, 2, -1], [-2, 0, -1]]), mindspore.float32)
|
>>> input = Tensor(np.array([[1, 2, -1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> result = act_quant(input)
|
>>> result = act_quant(input)
|
||||||
>>> result
|
>>> result
|
||||||
|
@ -1096,7 +1109,8 @@ class LeakyReLUQuant(_QuantActivation):
|
||||||
Args:
|
Args:
|
||||||
activation (Cell): Activation cell class.
|
activation (Cell): Activation cell class.
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1106,7 +1120,8 @@ class LeakyReLUQuant(_QuantActivation):
|
||||||
Tensor, with the same type and shape as the `input`.
|
Tensor, with the same type and shape as the `input`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> activation = nn.LeakyReLUQuant(nn.LeakyReLU())
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> activation = nn.LeakyReLUQuant(nn.LeakyReLU(), quant_config=qconfig)
|
||||||
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> result = activation(input)
|
>>> result = activation(input)
|
||||||
>>> result
|
>>> result
|
||||||
|
@ -1153,7 +1168,8 @@ class HSwishQuant(_QuantActivation):
|
||||||
Args:
|
Args:
|
||||||
activation (Cell): Activation cell class.
|
activation (Cell): Activation cell class.
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1163,7 +1179,8 @@ class HSwishQuant(_QuantActivation):
|
||||||
Tensor, with the same type and shape as the `input`.
|
Tensor, with the same type and shape as the `input`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> activation = nn.HSwishQuant(nn.HSwish())
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> activation = nn.HSwishQuant(nn.HSwish(), quant_config=qconfig)
|
||||||
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> result = activation(input)
|
>>> result = activation(input)
|
||||||
>>> result
|
>>> result
|
||||||
|
@ -1210,7 +1227,8 @@ class HSigmoidQuant(_QuantActivation):
|
||||||
Args:
|
Args:
|
||||||
activation (Cell): Activation cell class.
|
activation (Cell): Activation cell class.
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1220,7 +1238,8 @@ class HSigmoidQuant(_QuantActivation):
|
||||||
Tensor, with the same type and shape as the `x`.
|
Tensor, with the same type and shape as the `x`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> activation = nn.HSigmoidQuant(nn.HSigmoid())
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> activation = nn.HSigmoidQuant(nn.HSigmoid(), quant_config=qconfig)
|
||||||
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
>>> input = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> result = activation(input)
|
>>> result = activation(input)
|
||||||
>>> result
|
>>> result
|
||||||
|
@ -1266,7 +1285,8 @@ class TensorAddQuant(Cell):
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1277,7 +1297,8 @@ class TensorAddQuant(Cell):
|
||||||
Tensor, with the same type and shape as the `input_x1`.
|
Tensor, with the same type and shape as the `input_x1`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> add_quant = nn.TensorAddQuant()
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> add_quant = nn.TensorAddQuant(quant_config=qconfig)
|
||||||
>>> input_x1 = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
>>> input_x1 = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> input_x2 = Tensor(np.ones((2, 3)), mindspore.float32)
|
>>> input_x2 = Tensor(np.ones((2, 3)), mindspore.float32)
|
||||||
>>> result = add_quant(input_x1, input_x2)
|
>>> result = add_quant(input_x1, input_x2)
|
||||||
|
@ -1311,7 +1332,8 @@ class MulQuant(Cell):
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
ema_decay (float): Exponential Moving Average algorithm parameter. Default: 0.999.
|
||||||
quant_config (QuantConfig): Configs the oberser type of weight and activation. Default: quant_config_default.
|
quant_config (QuantConfig): Configs the oberser types and quant configs of weight and activation. Default:
|
||||||
|
both set to default FakeQuantWithMinMaxObserver.
|
||||||
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
quant_dtype (QuantDtype): Specifies the FakeQuant datatype. Default: QuantDtype.INT8.
|
||||||
|
|
||||||
Inputs:
|
Inputs:
|
||||||
|
@ -1322,7 +1344,8 @@ class MulQuant(Cell):
|
||||||
Tensor, with the same type and shape as the `input_x1`.
|
Tensor, with the same type and shape as the `input_x1`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
>>> mul_quant = nn.MulQuant()
|
>>> qconfig = compression.quant.create_quant_config()
|
||||||
|
>>> mul_quant = nn.MulQuant(quant_config=qconfig)
|
||||||
>>> input_x1 = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
>>> input_x1 = Tensor(np.array([[1, 2, 1], [-2, 0, -1]]), mindspore.float32)
|
||||||
>>> input_x2 = Tensor(np.ones((2, 3)) * 2, mindspore.float32)
|
>>> input_x2 = Tensor(np.ones((2, 3)) * 2, mindspore.float32)
|
||||||
>>> result = mul_quant(input_x1, input_x2)
|
>>> result = mul_quant(input_x1, input_x2)
|
||||||
|
|
|
@ -18,13 +18,13 @@ import mindspore.nn as nn
|
||||||
from mindspore.ops import operations as P
|
from mindspore.ops import operations as P
|
||||||
from mindspore import Tensor
|
from mindspore import Tensor
|
||||||
from mindspore.nn import FakeQuantWithMinMaxObserver, Conv2dBnFoldQuant
|
from mindspore.nn import FakeQuantWithMinMaxObserver, Conv2dBnFoldQuant
|
||||||
from mindspore.compression.quant import qat
|
from mindspore.compression.quant import create_quant_config
|
||||||
|
|
||||||
_ema_decay = 0.999
|
_ema_decay = 0.999
|
||||||
_symmetric = True
|
_symmetric = True
|
||||||
_fake = True
|
_fake = True
|
||||||
_per_channel = True
|
_per_channel = True
|
||||||
_quant_config = qat.get_quant_config(per_channel=(_per_channel, False), symmetric=(_symmetric, False))
|
_quant_config = create_quant_config(per_channel=(_per_channel, False), symmetric=(_symmetric, False))
|
||||||
|
|
||||||
|
|
||||||
def _weight_variable(shape, factor=0.01):
|
def _weight_variable(shape, factor=0.01):
|
||||||
|
|
|
@ -19,13 +19,13 @@ import mindspore.common.initializer as weight_init
|
||||||
from mindspore.ops import operations as P
|
from mindspore.ops import operations as P
|
||||||
from mindspore import Tensor
|
from mindspore import Tensor
|
||||||
from mindspore.nn import FakeQuantWithMinMaxObserver, Conv2dBnFoldQuant
|
from mindspore.nn import FakeQuantWithMinMaxObserver, Conv2dBnFoldQuant
|
||||||
from mindspore.compression.quant import qat
|
from mindspore.compression.quant import create_quant_config
|
||||||
|
|
||||||
_ema_decay = 0.999
|
_ema_decay = 0.999
|
||||||
_symmetric = True
|
_symmetric = True
|
||||||
_fake = True
|
_fake = True
|
||||||
_per_channel = True
|
_per_channel = True
|
||||||
_quant_config = qat.get_quant_config(per_channel=(_per_channel, False), symmetric=(_symmetric, False))
|
_quant_config = create_quant_config(per_channel=(_per_channel, False), symmetric=(_symmetric, False))
|
||||||
|
|
||||||
|
|
||||||
def _weight_variable(shape, factor=0.01):
|
def _weight_variable(shape, factor=0.01):
|
||||||
|
|
Loading…
Reference in New Issue