Google提供的 quantization-aware-trainning的量化训练方法,具体可以参考https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize
对应的论文
https://arxiv.org/abs/1712.05877
还有这个白皮书
https://arxiv.org/abs/1806.08342
简单总结下:
1) 如何训练
在你定义好网络结构之后, 加上下面这句话,即可量化训练
tf.contrib.quantize.create_training_graph(input_graph=g,
quant_delay=2000000)
其中,g为你创建好的模型,quant_delay表示网络在进行量化训练前 采用浮点训练的次数,在源码中,quant_delay默认为0。
这个默认值比较适合finetune一个已经训练好的模型。如果重头开始训,quant_delay应该设置为浮点模型收敛时的steps,模型训到此steps之后,量化训练便激活。(从头训练一个模型,quant_delay的值不一定非要取浮点模型收敛时的step值,有时取0,即直接量化训效果会更好)
可以用tensorboard可视化模型,来查看量化训练是否成功,应该是像下面这样,嵌入伪量化操作
图1
图2和图3分别为weights_quant和act_quant的展开