Tensorflow qint8,quint8,qint32,qint16和quint16数据类型是什么?

alb*_*Nod 5 python quantization neural-network tensorflow tensorflow-lite

我正在查看Tensorflow tf.nn.quantized_conv2d函数,并且想知道qint8等确切是什么数据类型,特别是如果它们是tf.contrib.quantize中用于“伪量化节点”的数据类型,或者实际上使用8位(用于qint8)存储在内存中。

我知道它们是在tf.dtypes.DType中定义的,但是没有关于它们实际是什么的任何信息。

Ten*_*ort 5

这些是output Tensor函数的数据类型,tf.quantization.quantize()。这对应于T函数的参数。

下面提到的是底层代码,它将张量从一种数据类型(例如float32)转换/量化为另一种(tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16)。

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
if T == qint8: out[i] -= (range(T) + 1) / 2.0
Run Code Online (Sandbox Code Playgroud)

然后,它们可以传递给诸如tf.nn.quantized_conv2d等的函数,其输入是量化张量,如上所述。

TLDR,简而言之回答您的问题,它们实际上存储qint8在内存中的8 位(对于)。

您可以在以下链接中找到有关此主题的更多信息:

https://www.tensorflow.org/api_docs/python/tf/quantization/quantize

https://www.tensorflow.org/api_docs/python/tf/nn/quantized_conv2d

https://www.tensorflow.org/lite/performance/post_training_quantization

如果您觉得这个答案有用,请接受这个答案和/或投票。谢谢。

  • 并没有真正解释“tf.qint8”与“tf.int8”之间的区别。为什么需要另一种数据类型?什么时候应该使用其中一种而不是另一种? (4认同)