Tensorflow 量化感知训练

Posted

技术标签:

【中文标题】Tensorflow 量化感知训练【英文标题】:Tensorflow Quantization Aware Training 【发布时间】:2021-01-08 10:03:07 【问题描述】:

我想量化一个 DenseNet 模型。我正在使用 TensorFlow 2.4。

import tensorflow_model_optimization as tfmot
model = tf.keras.applications.DenseNet121(include_top=True,weights=None,input_tensor=None,input_shape=None,pooling=None,classes=1000) 
quantize_model = tfmot.quantization.keras.quantize_model
model = quantize_model(model)

但我收到以下消息:

RuntimeError: Layer conv2_block1_0_bn: 不受支持。您可以通过将tfmot.quantization.keras.QuantizeConfig 实例传递给quantize_annotate_layer API 来量化这一层。

有什么办法可以做到这一点。 我无法更改 keras 代码。

【问题讨论】:

【参考方案1】:

在您的情况下,您需要单独量化层BatchNormalization

如果您从Quantization TF Guide 中看到以下示例代码 sn-p,则使用DefaultDenseQuantizeConfig 来处理此问题。希望本指南能帮助您解决这个问题。

quantize_annotate_layer = tfmot.quantization.keras.quantize_annotate_layer
quantize_annotate_model = tfmot.quantization.keras.quantize_annotate_model
quantize_scope = tfmot.quantization.keras.quantize_scope

class CustomLayer(tf.keras.layers.Dense):
  pass

model = quantize_annotate_model(tf.keras.Sequential([
   quantize_annotate_layer(CustomLayer(20, input_shape=(20,)), DefaultDenseQuantizeConfig()),
   tf.keras.layers.Flatten()
]))

# `quantize_apply` requires mentioning `DefaultDenseQuantizeConfig` with `quantize_scope`
# as well as the custom Keras layer.
with quantize_scope(
  'DefaultDenseQuantizeConfig': DefaultDenseQuantizeConfig,
   'CustomLayer': CustomLayer):
  # Use `quantize_apply` to actually make the model quantization aware.
  quant_aware_model = tfmot.quantization.keras.quantize_apply(model)

quant_aware_model.summary()

【讨论】:

以上是关于Tensorflow 量化感知训练的主要内容,如果未能解决你的问题,请参考以下文章

基于pytorch量化感知训练(mnist分类)--浮点训练vs多bit后量化vs多bit量化感知训练效果对比

基于OneFlow实现量化感知训练

基于OneFlow实现量化感知训练

pytorch量化感知训练(QAT)示例---ResNet

基于pytorch后量化(mnist分类)---浮点训练vs多bit后量化vs多bit量化感知训练效果对比

深度学习框架量化感知训练的思考及OneFlow的一种解决方案