Note|tensorflow freeze model

一、freeze

加载模型文件,从checkpoint文件读取权重数据初始化到模型里的权重变量,将权重变量转换成权重常量,通过指定的输出节点将没用于输出推理的Op节点从图中剥离掉,再重新保存到指定的文件里

1.tf.train.write_graph()以及tf.train.saver()生成pb文件和ckpt文件

bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=/path/to/graph.pb --input_checkpoint=/path/to/model.ckpt --output_node_names=output/predict --output_graph=/path/to/frozen.pb

2.把训练好的权重变成常量之后再保存成PB文件

output_graph_def = convert_variables_to_constants(sess, sess.graph_def, output_node_names=['output/predict'])

with tf.gfile.FastGFile('model/CTNModel.pb', mode='wb') as f:

     f.write(output_graph_def.SerializeToString())

二、quant

1.网络参数是按层组织,每层数值都在同一数量级,即范围相差不大,如[-6.0,4.0],有大量论文研究表明确认值最大和最小后每层数据使用8bit定点化量化已可以很好满足推断计算。量化最直接结果是参数存储空间要求变小,经验值是减少约3/4;减少内存读取数据量,节省带宽;使用simd进行计算加速,如果有dsp进行8bit加速计算节能,使得移动设备上进行推断计算变得更强大有效。

bazel-bin/tensorflow/tools/quantization/quantize_graph \

  --input=/tmp/classify_image_graph_def.pb \

  --output_node_names="softmax" --output=/tmp/quantized_graph.pb \

  --mode=eightbit

2.可删除给定的一组输入和输出不需要的所有节点,该脚本还进行了一些其他优化,可以帮助加快模型,例如将显式批量归一化操作合并到卷积权重中以减少计算次数。这可以根据输入型号提供30%的速度

python -m tensorflow.python.tools.optimize_for_inference \

  --input = tf_files / retrained_graph.pb \

  --output = tf_files / optimized_graph.pb \

  --input_names =“input”\

  --output_names = “final_result”

你可能感兴趣的:(Note|tensorflow freeze model)