问题标签 [quantization-aware-training]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在进行每通道量化时,TensorFlow 的 QAT 不适用于 LastValue 或 MovingAverage 量化器
与此问题相关,其中包含源代码。
我正在尝试将 TensorFlow 的量化感知训练与每通道量化一起使用。如上述问题所述,使用 AllValuesQuantizer 似乎不起作用。因此,我尝试使用 LastValue 和 MovingAverage 量化器,它们都产生类似的张量形状相关错误。
显然,量化过程需要一些形状 [] 的张量,我不明白为什么。这是 TF 中的错误,还是我的模型不兼容?
同样,这是在我的函数调用中使用 per_axis=True 和 quantizer=QAT_LAST_VALUE 或 QAT_MA 时。
最后值量化器输出:
MovingAverageQuantizer 输出:
keras - 量化感知训练 Google Coral 的对象检测模型
我目前正在尝试使用 tensorflow 模型优化模块对对象检测模型进行量化感知训练。我在尝试执行此操作时不断收到错误,并在下面附上了我的代码和错误。每当我尝试使用 quantize_model 时,都会弹出此错误:“ValueError: Cannot assign to variableefficientnet-lite4/blocks_0/depthwise_conv2d/depthwise_kernel:0 due to variable shape (3, 3, 32, 1) and value shape (3, 3) , 224, 1) 不兼容”。我该如何解决这个问题,或者是否有更简单的方法来量化感知训练对象检测模型以在谷歌珊瑚 USB 加速器上工作?
错误: 错误图像
tensorflow - TensorFlow 量化感知训练 - 目标张量中的 NaN
我正在尝试对现有的 TensorFlow+NVIDIA DALI 管道实施量化感知训练 (QAT),以完成密集预测计算机视觉任务。我的训练损失首先像往常一样减少,然后瞬间跳到 NaN。使用tf.debugging
损失函数中的 API,我发现我从数据管道中的“目标”张量中获取了 NaN。奇怪的是,当 QAT 被禁用时,我没有从(相同的)数据管道中获得任何 NaN。
我的怀疑是,在目标张量的值超出 TensorFlow 预期范围的某些情况下,我只是简单地出现溢出。如果我对目标张量进行归一化,我不会得到 NaN,这一事实加强了这种怀疑。
但话又说回来,该模型似乎在 QAT 期间实际上并未进行任何量化。从量化意识训练综合指南中的功能示例:
和
“请注意,生成的模型是量化感知的,但不是量化的(例如,权重是 float32 而不是 int8)。”
我验证了我的损失函数得到了一个 float32 目标张量tf.print(target_tensor.dtype)
。
有什么想法吗?
tensorflow - ValueError: 无法解析模型:pybind11::init(): factory function returned nullptr
经过长时间寻找我的问题,任何解决方案基金都不适合我。我希望你能帮助我克服这个问题,这样我就可以继续我的项目。问题是在对 GRU 模型进行训练后整数量化时,它给了我以下错误: ValueError: Failed to parse the model: pybind11::init(): factory function returned nullptr. GRU量化误差
我正在使用的代码:
deep-learning - pytorch 静态量化:不同的训练(校准)和推理后端
我们可以使用不同的 CPU 架构(和后端)来训练(校准)和推断量化的 pytorch 模型吗?
我发现的有关此主题的唯一帖子指出:
静态量化必须在与您的部署目标具有相同架构的机器上执行。如果您使用 FBGEMM,则必须在 x86 CPU 上执行校准过程;如果您使用的是 QNNPACK,则需要在 ARM CPU 上进行校准
但是官方文档中没有关于此的内容。
python - 使用自定义层更改权重和变量的 TensorFlow 量化感知
我想在 Tensorflow 2.5 中使用自定义层进行量化感知训练 (QAT)
我按照指南:
https://www.tensorflow.org/model_optimization/guide/quantization/training_comprehensive_guide
我已经创建了图层:
和配置:
我已经将包含层的模型转换为量化感知:
模型已成功转换,但是,通过检查变量和权重,我发现它们对于特定层并不相同。(对于其他未定义为自定义图层的图层,它们是相同的!)
似乎权重已重新初始化,而不是从原始模型(非量化)克隆权重。
这里我的层的变量不一样(层是0和1,0的例子)层名称:model_to_quantize.trainable_variables[0].name is 'quantize_annotate/kernel_rotate:0' quant_aware_model.trainable_variables[0].name是'rotate_layer_2/kernel_rotate:0'
对于其他层,它是相同的:层名称:model_to_quantize.trainable_variables[2].name is 'conv2d/kernel:0' quant_aware_model.trainable_variables[2].name is 'conv2d/kernel:0'
tensorflow - 张量流动态范围量化
动态范围量化的张量流文档指出:
在推理时,权重从 8 位精度转换为浮点,并使用浮点内核进行计算。此转换只进行一次并缓存以减少延迟。
同样在动态范围量化中,激活值始终存储在浮点数 32 中,但是,它们在处理时转换为 8 位整数,并在处理完成后返回浮点数。
我很困惑,如果在推理时将权重转换为 float32,那么量化是如何完成的?
pytorch - pytorch model.named_modules() 跳过一些层
这是我的模型(float32)的一部分,我将融合它进行量化。我的方法是使用named_modules遍历每个子模块并检查它们是conv2d batchnormlization还是relu。
我发现如果它错过了scratch.refinenet4.resConfUnit1.activation 同样的事情发生在resConfUnit2中的激活。
这是一个错误吗?
...
tensorflow - 将 Resnet50 模型转换为顺序模式(在 Tensorflow 中)
作为我工作的一部分,我希望在我从头开始编写的基本 Resnet50 模型上应用 Quantization-Aware Training,如下所示:
问题是,目前 TF 中的 Quantization-Aware Training 选项仅支持 Sequential 模式。因此,我希望将我在Functional模式中编写的Resnet模式转换为Sequential模式。问题是,我似乎无法弄清楚如何转换Add
res_identity 块和 res_conv 中的图层。有谁知道我怎么能做到这一点?谢谢!
tensorflow - Activity Regularizer 不适用于量化感知训练 (QAT) TF 2.6
Activity Regularizer 不适用于量化感知训练 (QAT)。
TypeError:函数构建代码之外的操作正在传递一个“图形”张量。
这仅发生在量化模型上,非量化模型对活动正则化损失具有 numpy 值。模型损失,即正则化损失应该在没有空张量/占位符的情况下累积。并且在急切模式下执行时应该能够在图形之外对它们进行操作。
目前,活动正则化损失张量是<class 'tensorflow.python.framework.ops.Tensor'>
没有 numpy 值的类型,偏差正则化张量也是 tf.tensor 但确实带有 numpy 值。但我不确定这是否会引发错误,我无法对 tf op 进行操作。
重现问题的代码
错误输出
系统信息
TensorFlow 版本(从源代码或二进制安装):TF 2.6
TensorFlow 模型优化版本(从源代码或二进制安装):pip install
Python版本:3.6.9