Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tf.fake\u quant\u与\u min\u max\u参数和tf.fake\u quant\u与\u min\u max\u变量之间有什么区别_Python_Tensorflow_Quantization - Fatal编程技术网

Python tf.fake\u quant\u与\u min\u max\u参数和tf.fake\u quant\u与\u min\u max\u变量之间有什么区别

Python tf.fake\u quant\u与\u min\u max\u参数和tf.fake\u quant\u与\u min\u max\u变量之间有什么区别,python,tensorflow,quantization,Python,Tensorflow,Quantization,我很想了解张量流函数之间的区别 tf.fake_quant_with_min_max_args tf.fake_quant_with_min_max_vars 在API中,它们的描述几乎相同。 我通常通过tf.fake\u quant\u与\u min\u max\u vars手动量化所需的节点,但我不确定它是否正确 例如,权重是否应该使用tf.fake\u quant\u和\u min\u max\u参数 类似地,看一下quantize.quantize的代码,我知道它基本上会遍历图形,找到

我很想了解张量流函数之间的区别

tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars
在API中,它们的描述几乎相同。 我通常通过
tf.fake\u quant\u与\u min\u max\u vars
手动量化所需的节点,但我不确定它是否正确

例如,权重是否应该使用
tf.fake\u quant\u和\u min\u max\u参数


类似地,看一下quantize.quantize的代码,我知道它基本上会遍历图形,找到兼容的张量,并根据全局步骤为标识/量化添加节点。然而,我应该理解,并非所有操作都是量化的(例如,conv1d,尽管conv2d和mat/mul是量化的)。该库将来是否支持所有操作?

关于命名,这有点用词不当。“args”变量使用属性表示最小值/最大值,因此仅对固定范围有效。“VAR”变量采用任意的最小/最大张量。这些是实际VAR还是其他计算值取决于量化方法。“VAR”变体的最小/最大值具有梯度,因此可以进行训练。许多训练方法只是在训练时使用批次的最小/最大值计算它们,然后使用指数移动平均值将它们累积到不可训练的变量中。然后在评估时,使用最小/最大变量代替计算的最小/最大值

如果手动添加它们,则需要确保所有算术运算(add、mul等,但不包括转置、重塑等)的输入在输入的张量上有一个适当的伪量化运算

在实践中,我发现适用于此的规则是:

  • 当一个权重变量输入到算术运算中时,添加一个伪量变量,其中包含从权重的最小值/最大值计算其最小值/最大值的变量

  • 在任何算术运算之后添加一个伪变量,该算术运算在训练时累积为每个运算的专用最小/最大变量,并在评估时仅使用这些变量

  • 在模型的顶层输入中添加一个适当的伪数量*op(如果是通过某种形式的嵌入查找驱动的模型,则不需要)。这包括输入的常量,除非它们是默认范围

  • 如果你这样做的话,你通常会遇到这样的情况:每个张量都是量子化的,没有冗余/冲突的量子参数。根据模型的不同,可能需要额外的细微差别和其他技巧才能使toco/tflite能够仅使用量化类型运行它

    我不太熟悉做这件事的自动化工具,但我相信这是他们在重写图表时采用的一般方法。在graphdef级别(与源级别相反,在源级别,某些事情更为明显)上尝试在盲人中进行转换时,他们还需要检测和处理某些需要额外按摩的模式

    为了使“手动”方法不太麻烦,我编写/使用了一些库,这些库只允许我通过辅助函数对重要的张量进行注释,这些辅助函数遵循一组模型级参数,这些参数允许我逐层调整量化策略


    Hth.

    非常感谢您的精彩回答!