'quantization' 在 interpreter.get_input_details() 中是什么意思?
What does 'quantization' mean in interpreter.get_input_details()?
使用 tflite 并获取解释器的属性,例如:
print(interpreter.get_input_details())
[{'name': 'input_1_1', 'index': 47, 'shape': array([ 1, 128, 128, 3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.003921568859368563, 0)}]
'quantization': (0.003921568859368563, 0)
是什么意思?
表示量化参数值:输入张量的scale和zero_point。
这是使用公式将量化的 uint8 数字 q 转换为浮点数 f 所必需的:
f = (q - zero_point) * scale
不幸的是 documentation of get_input_details
没有解释:
Returns: A list of input details.
但是如果你查看源代码 get_input_details
,它会调用 _get_tensor_details
(source),并且这个函数确实记录了它:
"""Gets tensor details.
Args:
tensor_index: Tensor index of tensor to query.
Returns:
A dictionary containing the following fields of the tensor:
'name': The tensor name.
'index': The tensor index in the interpreter.
'shape': The shape of the tensor.
'quantization': Deprecated, use 'quantization_parameters'. This field
only works for per-tensor quantization, whereas
'quantization_parameters' works in all cases.
'quantization_parameters': The parameters used to quantize the tensor:
'scales': List of scales (one if per-tensor quantization)
'zero_points': List of zero_points (one if per-tensor quantization)
'quantized_dimension': Specifies the dimension of per-axis
quantization, in the case of multiple scales/zero_points.
这是什么意思?
这些量化参数是用于量化的值(将一系列数字从一个范围转换为另一个更有限的范围,例如 0-10 转换为 0-1)。在 TensorFlow 中,这专门用于表示何时将数据类型更改为支持更少数字的数据类型:例如float32 到 float16,或 float32 到 uint8,或 float16 到 int8。反量化是相反的(例如,当您想从量化为 uint8 的模型中获取概率并且量化输出在 0-255 之间时)。
数学很简单,就像更一般的形式归一化(使范围从(0到1):
- 量化:
q = (f / s) + z
- 反量化:
f = (q - z) * s
- 有关此量化方程的更多信息,请参阅 Quantization Specification。
注意: Aleksandr Kondratyev
的等式 f = (q - zero_point) * scale
实际上是反量化,因为它需要 q(量化值)并为您提供 f(浮点数)。当然你也可以把等式倒过来得到另一个。
使用 tflite 并获取解释器的属性,例如:
print(interpreter.get_input_details())
[{'name': 'input_1_1', 'index': 47, 'shape': array([ 1, 128, 128, 3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.003921568859368563, 0)}]
'quantization': (0.003921568859368563, 0)
是什么意思?
表示量化参数值:输入张量的scale和zero_point。
这是使用公式将量化的 uint8 数字 q 转换为浮点数 f 所必需的:
f = (q - zero_point) * scale
不幸的是 documentation of get_input_details
没有解释:
Returns: A list of input details.
但是如果你查看源代码 get_input_details
,它会调用 _get_tensor_details
(source),并且这个函数确实记录了它:
"""Gets tensor details.
Args:
tensor_index: Tensor index of tensor to query.
Returns:
A dictionary containing the following fields of the tensor:
'name': The tensor name.
'index': The tensor index in the interpreter.
'shape': The shape of the tensor.
'quantization': Deprecated, use 'quantization_parameters'. This field
only works for per-tensor quantization, whereas
'quantization_parameters' works in all cases.
'quantization_parameters': The parameters used to quantize the tensor:
'scales': List of scales (one if per-tensor quantization)
'zero_points': List of zero_points (one if per-tensor quantization)
'quantized_dimension': Specifies the dimension of per-axis
quantization, in the case of multiple scales/zero_points.
这是什么意思?
这些量化参数是用于量化的值(将一系列数字从一个范围转换为另一个更有限的范围,例如 0-10 转换为 0-1)。在 TensorFlow 中,这专门用于表示何时将数据类型更改为支持更少数字的数据类型:例如float32 到 float16,或 float32 到 uint8,或 float16 到 int8。反量化是相反的(例如,当您想从量化为 uint8 的模型中获取概率并且量化输出在 0-255 之间时)。
数学很简单,就像更一般的形式归一化(使范围从(0到1):
- 量化:
q = (f / s) + z
- 反量化:
f = (q - z) * s
- 有关此量化方程的更多信息,请参阅 Quantization Specification。
注意: Aleksandr Kondratyev
的等式 f = (q - zero_point) * scale
实际上是反量化,因为它需要 q(量化值)并为您提供 f(浮点数)。当然你也可以把等式倒过来得到另一个。