TensorFlow Lite 采坑记(一):模型转换

TensorFlow Lite 从入门到 放弃 精通

TensorFlow Lite 采坑记(二):模型转换初探

本片主要分两部分:第一部分以为tflite_convert为例(TF版本需>=1.9)介绍模型转换的相关细节;第二部分浅显地谈一下对TF Lite中模型转换的理解

1. tflite_convert:
Conversion process
如上图,TFLite Converter可以将高阶API:tf.Kerastf.Estimator保存的模型直接转换为.tflite的格式,这里笔者的理解是理论上绝大多数的模型都可以被转为.tflite的形式,即转换成TFLite FlatBuffer,但是否可以被TFlite interpreter接受取决于operators兼容性(结论待验证)。对于保存成GraphDef+Checkpoints形式的模型,可以用官方脚本freeze_graph.py来保存成.pb文件再进行转换。
以文档中提到的tflite_convert命令行为例:

  1. 首先下载由预训练过模型生成的.pb文件
  2. 由于模型的构建过程我们并不清楚,而tflite_convert命令行需要--input_arrays--output_arrays两个重要的参数,现利用官方提供的脚本工具import_pb_to_tensorboard.py进行.pb文件的可视化,从而确定input array和output array。(注:tensorflow版本需>=0.12)
    cd 到脚本所在目录,运行:
python import_pb_to_tensorboard.py --model_dir path/to/.pb --log_dir /tmp/tensorflow_logdir

<snip>

Model Imported. Visualize by running: tensorboard --logdir=/tmp/tensorflow_logdir
tensorboard --logdir=/tmp/tensorflow_logdir

得到Graph:在这里插入图片描述
由此可见–input_array=input, --output_array=output
接着利用命令行转换:

tflite_convert \
  --output_file=/tmp/foo.tflite \
  --graph_def_file=/tmp/your_model.pb \
  --input_arrays=input_node \
  --output_arrays=output_node

在这里插入图片描述
提示需要提供input array的shape
回到tensorboard, 双击input,得到其output shape为:?x28x28x1
在这里插入图片描述
但是这个是Reshape之后的结果,在查阅一些资料后发现input shape还是无法确定,最后参照官方文档中的例子,尝试输入 --input_shape=1,28,28,转换成功…
注意:获得的.tflite文件大小不变,与之前.pb文件一样

2. 大致流程
在这里插入图片描述
相关链接:
Post-training quantization:
https://www.tensorflow.org/lite/performance/post_training_quantization
Keras api(Weight Pruning):
https://www.tensorflow.org/model_optimization/guide/pruning/pruning_with_keras
Quantization-aware training
https://github.com/tensorflow/tensorflow/tree/r1.13/tensorflow/contrib/quantize
Customize ops
https://heartbeat.fritz.ai/compiling-a-tensorflow-lite-build-with-custom-operations-cf6330ee30e2

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值