微软放大招-MMdnn开源了

wufei123 2024-05-28 阅读:16 评论:0
MMdnn 是一个用于转换、可视化和诊断深度神经网络模型的综合性、跨框架的解决方案。MMdnn 中的「MM」代表模型管理,「dnn」是「deep neural network」(深度神经网络)的缩写。 MMdnn 可将一个框架训练的 DN...

微软放大招-MMdnn开源了 MMdnn 是一个用于转换、可视化和诊断深度神经网络模型的综合性、跨框架的解决方案。MMdnn 中的「MM」代表模型管理,「dnn」是「deep neural network」(深度神经网络)的缩写。

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 模型转换

业界和学界存在大量现有框架,适合开发者和研究者来设计模型,每个框架具备自己的网络结构定义和模型保存格式。框架之间的差距阻碍了模型的交互操作。

微软放大招-MMdnn开源了

我们提供一个模型转换器,帮助开发者通过中间表征格式转换模型,以适合不同框架。

支持框架

每个支持的框架都有详细的 README 文档,它们可以在以下conversion件夹找到。

地址:https://github.com/Microsoft/MMdnn/tree/master/mmdnn/conversion Caffe Keras MXNet TensorFlow(实验阶段,强烈建议先阅读 README) Microsoft Cognitive Toolkit (CNTK) PyTorch CoreML(实验阶段)

测试模型

我们在部分 ImageNet 模型上对当前支持的框架间模型转换功能进行了测试。

微软放大招-MMdnn开源了

正在测试的框架: PyTorch CNTK Caffe2 ONNX 正在测试的模型: RNN 图像风格迁移 目标检测

模型可视化

你可以使用 MMdnn 模型可视化工具(http://vis.mmdnn.com/),提交自己的 IR json 文件进行模型可视化。为了运行下面的命令行,你需要使用喜欢的包管理器安装 requests、Keras、TensorFlow。

使用 Keras inception_v3 模型作为示例。

1. 下载预训练模型:

python -m mmdnn.conversion.examples.keras.extract_model -n inception_v3

2. 将预训练模型文件转换成中间表征格式:

python3 -m mmdnn.conversion._.convertToIR -f keras -d keras_inception_v3 -n imagenet_inception_v3.json

3. 打开 MMdnn 模型可视化工具地址(http://mmdnn.eastasia.cloudapp.azure.com:8080/),选择文件 keras_inception_v3.json。

微软放大招-MMdnn开源了

社区支持

本项目仍在继续开发与探索,它需要各位读者完善中间表征与支持的框架。因此,该项目的作者表示他非常希望有开发者能提供新的运算或扩展。

中间表征:中间表征在 protobuf 二进制文件中储存网络架构,在 NumPynative 格式中储存预训练权重。此外,目前 IR 权重数据使用的是 NHWC 格式。中间表征的细节请查看 ops.txt 和 graph.proto 文件。 框架:我们正在扩展到其它框架版本和可视化工具,例如 Caffe2、PyTorch 和 CoreML 等。此外,本项目也在积极开发 RNN 相关的操作方法。

使用案例

以下是该项目实现框架转换的基本案例,其中包括官方的教程和用户提供的各种案例,机器之心简要介绍了官方 Keras 到 CNTK 的转换教程。 官方教程:

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-<a style="color:#f60; text-decoration:underline;" href="https://www.php.cn/zt/15718.html" target="_blank">linux</a>_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 [============================&gt;.] - 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._.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._.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。

以上就是微软放大招-MMdnn开源了的详细内容,更多请关注知识资源分享宝库其它相关文章!

版权声明

本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com

分享:

扫一扫在手机阅读、分享本文

发表评论
热门文章
  • 华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀

    华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀
    华为 mate 70 或将首发麒麟新款处理器,并将此前有博主爆料其性能跑分将突破110万,这意味着 mate 70 性能将重新夺回第一梯队。也因此,苹果 iphone 16 唯一能有一战之力的性能,也要被 mate 70 拉近不少了。 据悉,华为 Mate 70 性能会大幅提升,并且销量相比 Mate 60 预计增长40% - 50%,且备货充足。如果 iPhone 16 发售日期与 Mate 70 重合,销量很可能被瞬间抢购。 不过,iPhone 16 还有一个阵地暂时难...
  • 酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元

    酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元
    本站 5 月 16 日消息,酷凛 id-cooling 近日推出霜界 240/360 一体式水冷散热器,采用黑色无光低调设计,分别定价 239/279 元。 本站整理霜界 240/360 散热器规格如下: 酷凛宣称这两款水冷散热器搭载“自研新 V7 水泵”,采用三相六极马达和改进的铜底方案,缩短了水流路径,相较上代水泵进一步提升解热能力。 霜界 240/360 散热器的水泵为定速 2800 RPM 设计,噪声 28db (A)。 两款一体式水冷散热器采用 27mm 厚冷排,...
  • 惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起

    惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起
    本站 5 月 14 日消息,继上线官网后,新款惠普战 99 商用笔记本现已上架,搭载酷睿 ultra / 锐龙 8040处理器,最高可选英伟达rtx 3000 ada 独立显卡,售价 4999 元起。 战 99 锐龙版 R7-8845HS / 16GB / 1TB:4999 元 R7-8845HS / 32GB / 1TB:5299 元 R7-8845HS / RTX 4050 / 32GB / 1TB:7299 元 R7 Pro-8845HS / RTX 2000 Ada...
  • python中def什么意思

    python中def什么意思
    python 中,def 关键字用于定义函数,这些函数是代码块,执行特定任务。函数语法为 def (参数列表)。函数可以通过其名字和圆括号调用。函数可以接受参数作为输入,并在函数体中使用参数名访问。函数可以使用 return 语句返回一个值,它将成为函数调用的结果。 Python 中 def 关键字 在 Python 中,def 关键字用于定义函数。函数是代码块,旨在执行特定任务。 语法 def 函数定义的语法如下: def (参数列表): # 函数体 示例 定义...
  • python中int函数的用法

    python中int函数的用法
    int() 函数将值转换为整数,支持多种类型(字符串、字节、浮点数),默认进制为 10。可以指定进制数范围在 2-36。int() 返回 int 类型的转换结果,丢弃小数点。例如,将字符串 "42" 转换为整数为 42,将浮点数 3.14 转换为整数为 3。 Python 中的 int() 函数 int() 函数用于将各种类型的值转换为整数。它接受任何可以解释为整数的值作为输入,包括字符串、字节、浮点数和十六进制表示。 用法 int(object, base=10) 其中...