微软开源 MMdnn:深度学习框架随心切换
Posted 微软学术合作
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微软开源 MMdnn:深度学习框架随心切换相关的知识,希望对你有一定的参考价值。
近日,微软开源 MMdnn,这是一款综合的、跨框架解决方案,可用于转换、可视化和诊断深度神经网络。目前支持 CNTK、Tensorflow、Caffe、Keras、MXNet 等框架。
MMdnn 一经开源便获得广泛关注,两个月便在 GitHub 上收获 985 个 Star。MMdnn 中的「MM」代表模型管理( Model Management ),「dnn」是「deep neural network」(深度神经网络)的缩写。
随着深度学习技术的快速发展,不同的团体和组织基于不同的平台和设计,建立了各种深度学习框架,比如目前最流行的 Google 开源的 TensorFlow 、微软提供的在 Speech 方面有突出性能的 CNTK 、拥有活跃社区的 Amazon 支持的 MXNet 、用户上涨迅速的 PyTorch 等等。
当用户基于各种原因学习并使用了一种框架的时候,常常会发现应用或者再训练的场景改变了,比如用户用 Caffe 训练好了一个图像识别的模型,但是生产环境是使用 TensorFlow 做预测。类似的将模型在不同框架之间相互操作转换的问题频频出现在各个社区。
微软亚洲研究院系统研究组一直关注深度学习框架的发展,当发现用户有这样的需求之后,便想实现一个深度学习框架中的 FFmpeg(一个非常流行的音视频转换库)。因此,MMdnn 诞生了。
MMdnn 可将一个框架训练的 DNN 模型转换到其他框架可用。其主要特征包括:
模型文件转换器,转换 DNN 模型使之适合不同框架;
模型代码块生成器,生成适合不同框架的训练或推断代码块;
模型可视化,针对不同框架可视化 DNN 网络架构和参数;
模型兼容性测试(正在进行)。
安装
通过以下命令行获取稳定版的 MMdnn:
pip install https://github.com/Microsoft/MMdnn/releases/download/0.1.3/mmdnn-0.1.3-py2.py3-none-any.whl
或者通过以下命令尝试最新版本:
pip install -U git+https://github.com/Microsoft/MMdnn.git@master
使用案例
官方教程:
Keras "inception_v3" to CNTK
用户案例:
MXNet "resnet 152 11k" to PyTorch
MXNet "resnext" to Keras
Tensorflow "resnet 101" to PyTorch
Tensorflow "mnist mlp model" to CNTK
Tensorflow "Inception_v3" to MXNet
Caffe "AlexNet" to Tensorflow
Caffe "inception_v4" to Tensorflow
Caffe "VGG16_SOD" to Tensorflow
Caffe "Squeezenet v1.1" to CNTK
Keras「inception_v3」模型到 CNTK 的转换
1. 安装 Keras 和 CNTK
pip install keras
pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.3-cp27-cp27mu-linux_x86_64.whl
or
pip install
https://cntk.ai/PythonWheel/CPU-Only/cntk-2.3-cp35-cp35m-linux_x86_64.whl
2. 准备 Keras 模型。以下示例将首先下载预训练模型,然后使用简单的模型抽取器从 Keras 应用中获取模型,抽取器将抽取 Keras 模型架构和权重。
$ python -m mmdnn.conversion.examples.keras.extract_model -n inception_v3
Using TensorFlow backend.
Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.5/inception_v3_weights_tf_dim_ordering_tf_kernels.h5
96075776/96112376 [============================>.] - ETA: 0s
.
.
.
Network structure is saved as [imagenet_inception_v3.json].
Network weights are saved as [imagenet_inception_v3.h5].
架构文件 imagenet_inception_v3.json 和权重文件 imagenet_inception_v3.h5 会下载至当前工作目录。
3. 将预训练模型文件转换为中间表征
$ python -m mmdnn.conversion._script.convertToIR -f keras -d converted -n imagenet_inception_v3.json -w imagenet_inception_v3.h5
Using TensorFlow backend.
.
.
.
Network file [imagenet_inception_v3.json] is loaded successfully.
IR network structure is saved as [converted.json].
IR network structure is saved as [converted.pb].
IR weights are saved as [converted.npy].
以上的命令会将 imagenet_inception_v3.json 作为神经网络架构的描述文件,imagenet_inception_v3.h5 作为预训练权重。然后计算出中间表征文件 converted.json 用于可视化,计算出 converted.proto 和 converted.npy 以进一步转换为其它框架。
4. 转换 IR 文件为 CNTK 模型
$ python -m mmdnn.conversion._script.IRToCode -f cntk -d converted_cntk.py -n converted.pb -w converted.npy
Parse file [converted.pb] with binary format successfully.
Target network code snippet is saved as [converted_cntk.py].
你将得到文件 converted_cntk.py,包括构建 Inception V3 网络的原始 CNTK 代码。
经过这三步,你已经将预训练 Keras Inception_v3 模型转换成 CNTK 网络文件 converted_cntk.py 和权重文件 converted.npy。你可以用这两个文件调整训练或推断。
5. 转存原始 CNTK 模型
$ python -m mmdnn.conversion.examples.cntk.imagenet_test -n converted_cntk -w converted.npy --dump cntk_inception_v3.dnn
.
.
.
CNTK model file is saved as [cntk_inception_v3.dnn], generated by [converted_cntk.py] and [converted.npy].
CNTK 可直接加载文件 cntk_inception_v3.dnn。
Visual Dnn Programming操作指南见下方视频。
视频配乐来源于网站 bensound。
除了在开源社区的工作和成绩,MMdnn将更加开放与高校的合作,欢迎有兴趣的老师和我们展开联合科研和青年访问学者计划,欢迎同学们加入微软学生实践空间站项目。在这里,你将有机会直接跟着陈程和秦婷婷导师做科研或者开源项目,更多细节请点击“阅读原文”参考微软学生俱乐部官网。
开源者介绍
陈程,微软亚洲研究院系统研究组副研究员,研究领域包括存储、分布式系统、分布式计算和机器学习。
秦婷婷,微软亚洲研究院系统研究组副研究员,研究领域包括分布式系统、搜索引擎技术和深度学习架构。
以上是关于微软开源 MMdnn:深度学习框架随心切换的主要内容,如果未能解决你的问题,请参考以下文章