gpt4 book ai didi

python - tf.fake_quant_with_min_max_args 和 tf.fake_quant_with_min_max_vars 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:55 25 4
gpt4 key购买 nike

我很想了解 tensorflow 函数之间的区别

tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars

在他们的 API 中,他们有几乎相同的描述。我通常通过tf.fake_quant_with_min_max_vars手动量化所需的节点,虽然我不确定它是否正确。

例如,权重是否应该使用 tf.fake_quant_with_min_max_args

同样,查看 quantize.Quantize 的代码,我确实理解它基本上遍历图形,找到兼容的张量并根据 global_step 添加用于标识/量化的节点。但是,我是否应该理解并非所有操作都是量化的(例如,conv1d,尽管 conv2d 和 mat/mul 是)。库是否支持 future 的所有操作?

最佳答案

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

如果手动添加它们,您需要确保所有算术操作(加法、乘法等但不包括转置、 reshape 等)的输入在输入它的张量上具有适当的 fake_quant* 操作。

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

  1. 当权重变量输入算术运算时,添加一个 fake_quant_with_min_max_vars,它根据权重的最小值/最大值计算其最小值/最大值。

  2. 在任何算术运算之后添加一个 fake_quant_with_min_max_vars,它在训练时为每个运算积累专用的最小/最大变量,并且只在评估时使用这些变量。

  3. 将适当的 fake_quant* op 添加到模型的最顶层输入(如果它是通过某种形式的嵌入查找驱动的模型则不需要)。这包括常量,除非它们是默认范围。

如果您以这种方式进行,您通常会遇到每个张量都被量化而没有冗余/冲突的量化参数的情况。根据模型的不同,可能需要额外的细微差别和其他技巧才能真正让 toco/tflite 能够仅使用量化类型运行它。

我不太熟悉执行此操作的自动化工具,但我相信这是他们在重写图表时采用的一般方法。它们还具有一些显着的复杂性来检测和解决某些模式,当尝试在 graphdef 级别(与某些事情更明显的源代码级别相反)进行盲目转换时需要额外按摩。

为了使“手动”方法不会太麻烦,我编写/使用了一些库,这些库只是让我通过将它们传递给辅助函数来注释重要的张量,这些辅助函数遵循模型级别的参数集,让我可以调整逐层量化策略。

嗯。

关于python - tf.fake_quant_with_min_max_args 和 tf.fake_quant_with_min_max_vars 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com