当前位置: 首页 > 知识库问答 >
问题:

如何找到量化matmul/con2D操作的浮点输出范围

荆弘伟
2023-03-14

我是tensorflow和quantization的新手,正在尝试对两个int8输入实现量化matmul操作。我很想知道手术背后的数学原理。我在tensorflow中看到,他们只对uint8输入实现了相同的功能,我想知道如何将其用于带符号的int8 matmul/conv2D。

更准确地说,我想知道如何获得matmul/cond2D操作的浮点输出范围。

任何帮助都将不胜感激。

共有1个答案

张晔
2023-03-14

我已经研究了一下张量流中的量化,并将其应用于将浮点运算转换为定量运算。

在我的例子中,我仍然有一个浮动输入到网络。输入在进入定量操作之前被量化。Tensorflow倾向于尽可能长时间地保持浮点值,以便与浮点操作兼容。这也是为什么在浮点输入被量化为8位整数格式后,tenstorflow保持最小和最大浮点范围的原因。量化产生的最小和最大浮点值也是定量操作的输入。

在您的情况下,Quant_conv2d操作对输入进行卷积:

  • 未签名的8位数据表单量化

这些产出是:

  • 结果为32位
  • 新的最小和最大范围为浮动值

新的浮点范围是根据内核值的范围和输入的范围,使用以下所述的QuantizationRangeformultimation函数计算得出的:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/quantization_utils.h

如上所述,输出为32位,最小和最大浮点值映射为绝对值,并可能将8位量化格式转换回浮点。

希望这有助于理解Tensorflow量化算法。

 类似资料:
  • 我使用以下代码生成量化的tflite模型 但是根据训练后量化: 生成的模型将完全量化,但为了方便起见,仍然采用浮点输入和输出。 要为Google Coral Edge TPU编译tflite模型,我还需要量化输入和输出。 在模型中,我看到第一个网络层将浮点输入转换为,最后一个网络层将转换为浮点输出。如何编辑tflite模型以除去第一个和最后一个浮动层? 我知道我可以在转换期间将输入和输出类型设置为

  • 输出操作允许DStream的操作推到如数据库、文件系统等外部系统中。因为输出操作实际上是允许外部系统消费转换后的数据,它们触发的实际操作是DStream转换。目前,定义了下面几种输出操作: Output Operation Meaning print() 在DStream的每个批数据中打印前10条元素,这个操作在开发和调试中都非常有用。在Python API中调用pprint()。 saveAsO

  • 问题内容: 我在Python中有一个浮点值列表: 我想使用IEEE 32位编码将这些值写到二进制文件中。用Python做到这一点的最佳方法是什么?我的列表实际上包含大约200 MB的数据,因此最好“不要太慢”。 由于有5个值,所以我只想要一个20字节的文件作为输出。 问题答案: 亚历克斯绝对是对的,用这种方法做起来更有效: 然后像这样读取数组: 如果您事先知道项目数(例如,从文件大小或其他某种机制

  • 问题内容: 如何在python中输入浮点无穷大文字? 我听说 是非便携式的。因此,我有以下建议: 这些标准还是便携式的?什么是最佳做法? 问题答案: 在python 2.6中,如果CPU支持,它是可移植的 float()函数现在会将字符串nan转换为IEEE 754非数字值,并将+ inf和-inf转换为正或负无穷大。这可以在具有IEEE 754语义的任何平台上使用。

  • 我可以在输入层之后使用批处理规范化层而不规范化我的数据吗?我可以期望得到类似的效果/性能吗? 在keras函数中,它应该是这样的:

  • numpy.matmul()函数返回两个数组的矩阵乘积。 虽然它返回2-D数组的正常乘积,但如果任一参数的维度为“2”,则将其视为驻留在最后两个索引中的矩阵堆栈并相应地进行广播。 另一方面,如果任一参数是1-D数组,则通过在其维度上附加1来将其提升为矩阵,在乘法后将其删除。 例子 (Example) # For 2-D array, it is matrix multiplication imp