[英]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.