簡體   English   中英

Tensorflow Keras 模型的量化感知訓練

[英]Quantization Aware Training for Tensorflow Keras model

我想用我的 keras 模型進行量化感知訓練。 我試過如下。 我正在使用 tensorflow 1.14.0

train_graph = tf.Graph()
train_sess = tf.compat.v1.Session(graph=train_graph)
tf.compat.v1.keras.backend.set_session(train_sess)

with train_graph.as_default():
    tf.keras.backend.set_learning_phase(1)
    model = my_keras_model()

    tf.contrib.quantize.create_training_graph(input_graph = train_graph, quant_delay=5)
    train_sess.run(tf.global_variables_initializer()) 

    model.compile(...)
    model.fit_generator(...)

    saver = tf.compat.v1.train.Saver()  
    saver.save(train_sess, checkpoint_path)

它工作沒有錯誤。

但是,保存的模型(h5 和 ckpt)的大小與沒有量化的模型完全相同。

這是正確的方法嗎? 我如何檢查它是否被很好地量化?

或者,有沒有更好的量化方法?

當您完成量化感知訓練並將模型保存到磁盤時,它實際上尚未量化。 換句話說,它為量化做好了“准備”,但權重仍然是 float32。 您必須進一步將模型轉換為 TFLite 才能對其進行實際量化。 您可以使用以下代碼段執行此操作:

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

quantized_tflite_model = converter.convert()

這將使用 int8 權重和 uint8 激活量化您的模型。

查看官方示例以進一步參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM