# Python 与 JavaScript 模型互转
# 什么是 Python 模型
通过 Python 版 TensorFlow/Keras 生成模型 , Keras 也是一个深度学习的框架。TensorFlow 也是支持 Keras 的 API 和语法的。
# Python 模型具体包含哪些模式
包括 TensorFlow Saved Model、keras HDF5 model 等
# Python 模型获取方式
开源网站下载/算法同事提供
# 什么是 Javascript 模型
可以在 TensorFlowJs 中(node 和浏览器)运行的模型
# Javascript 模型具体包含哪些模式
tfjs_layers_model 、 tfjs_graph_model 等
# Javascript 模型获取方式
开源网站下载/通过 TensorFlowjs 生成/由 Python 模型转化而来
# 为何要进行互转?
Python 模型 -- Javascript 模型 Javascript 模型可以在浏览器中运行
Javascript 模型 -- Python 模型 少见,为了在更多平台运行
Javascript 模型 -- Javascript 模型 分片/量化/加速
# 如何进行互转?
安装 TensorFlow.js Converter
在命令行指定输入输出路径和模型格式即可
# 安装 TensorFlow.js Converter
安装 Conda 因为 TensorFlow.js Converter(依赖 Python3.6.8 的版本)以来 Python 环境,为了不影响可能存在的 Python 环境我们需要给每一个应用单独创建一个 Python 环境。Conda 就是帮助我们创建 Python 的虚拟环境的。
使用 Conda 安装 Python 虚拟环境
使用 Python 虚拟环境安装 TensorFlow.js Converter
# 具体流程
# 方式一:
在清华大学软件源中下载 miniconda 安装到电脑
然后使用命令行安装 python 的虚拟环境
conda create -n tfjs python=3.6.8
使用 python --version 先查看当前版本,然后执行命令
conda activate tfjs
此时再执行查看 python 版本发现变到 3.6.8 了
然后安装 tensorflowjs Converter 的包(这里 tensorflowjs 就是 tensorflowjs Converter)
pip install tensorflowjs
tensorflowjs_converter -h // 验证安装是否成功
- conda 的一些命令
conda create -n tfjs python=3.6.8 // 创建python=3.6.8虚拟环境
conda remove -n tfjs --all // 删除所有conda环境
conda info --envs // 查看当前所有虚拟环境信息
conda activate tfjs // 激活tfjs这个虚拟python版本
conda deactivate // 退出激活的版本
# 方式二:
brew update
brew install pyenv
pyenv install 3.6.8
pyenv local 3.6.8
pip install tensorflowjs
# Python 模型 -- Javascript 模型
- 进入 python 虚拟环境 3.6.8,执行
tensorflowjs_converter // 验证环境是否正确
tensorflowjs_converter --input_format=keras --output_format=tfjs_layers_model data/mobilenet/keras.h5 data/mobilenet/layers_model
tensorflowjs_converter --input_format=keras --output_format=tfjs_graph_model data/mobilenet/keras.h5 data/mobilenet/graph_model
tensorflowjs_converter 输入格式 输出格式 输入路径(鼠标右键拷贝相对位置) 输出路径
- 并不是所有输入输出格式都能转换,必须相互对应,参照tfjs-converter
PS:生成的 graphModel 要修改 api 加载 graphModel 模型方可使用
# Javascript 模型 -- Python 模型
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras data/mobilenet/layers_model/model.json data/mobilenet/keras2.h5
# Javascript 模型 -- Javascript 模型 分片/量化/加速
- 分片 把一个模型分成很多片,每一片体积都很小了,再利用浏览器的并发加载能力,提升性能
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=tfjs_layers_model --weight_shard_size_bytes=100000 data/mobilenet/web_model/model.json data/mobilenet/sharded_model/model.json
转换完成之后可以看到权重文件被分成了多份,浏览器同时加载多个
- 量化 牺牲一部分精度来压缩模型的大小,也可以起到更快加载的效果
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=tfjs_layers_model --quantization_bytes=2 data/mobilenet/web_model/model.json data/mobilenet/quantized_model/model.json
量化后的模型体积减少
- 加速 通过将模型文件转换为 tfjs_graph_model 来加速模型 (tfjs_graph_model 内部使用了图优化来进行加速)
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=tfjs_graph_model data/mobilenet/web_model/model.json data/mobilenet/graph_model/model.json
PS:可以使用 Chrome 的控制台 Performance 去测试 predict 方法的执行时间去判断快慢