关键字 MMdnn,keras,mxnet,resnet50

需求:想测试一下keras下model转到MXNet框架下对于同一张图片各中间层输出结果有什么差异。

一. 前期准备

1. 依赖库的选择

由于各个库之间的依赖关系是存在限制关系的,最新的版本未必是最合适的,因此通过比较,最终确定的各个依赖库版本如下:

Python 3.5

Anaconda 4.2.0

Tensorflow 1.13.1

Mxnet 1.4.0

Mmdnn 0.2.4

Numpy 1.16.2

但是 mxnet 1.4.0.post0 要求numpy的版本<1.15.0,>=1.8.2,理论上来说是会出问题的,但是使用的时候没有报错。

2. 预训练模型的下载

使用resnet50为测试模型,按照MMdnn文档的指示,下载resnet50的预训练模型只需要如下命令:

mmdownload -f keras -n resnet50

二. 正式开始

将keras模型转化为Mxnet模型,官方提供了两种方法,为了对比keras和Mxnet便于调试,使用Step by Step方式,其步骤如下。

Step 1

mmtoir -f keras -w imagenet_resnet50.h5 -o converted

IR network structure is saved as [converted.json].

IR network structure is saved as [converted.pb].

IR weights are saved as [converted.npy].

Then you got the intermediate representation files converted.json for visualization, converted.pb and converted.npy for next steps.

Step 2

mmtocode -f mxnet -d converted_resnet50_mxnet.py -n converted.pb -w converted.npy -dw mxnet_converted-0000.param

And you will get a file named converted_resnet50_mxnet.py, which contains the mxnet codes to build the resnet50 network, the file named mxnet_converted-0000.param contains the parameters to build the network.

通过上述两个步骤即可得到keras到mxnet的resnet50的转换代码。

三. 框架对比

为了输出两种框架的中间结果,需要对代码进行处理(以最后一层为例)。

1. Keras

layer_model = Model(inputs=model.input, outputs=model.layers[-1].output)

其中-1表示的是resnet50最后一层输出的结果

features_keras =layer_model.predict(x_keras)

features_keras最后的数据就是最后的结果

2. Mxnet

fc1000_activation = mx.sym.SoftmaxOutput(data = fc1000, name = 'softmax')

group = mx.symbol.Group([fc1000_activation])

model = mx.mod.Module(symbol = group, context = mx.cpu(), data_names = ['input_1'])

model.forward(Batch([mx.nd.array(img)]))

features_mxnet = model.get_outputs()[0]

features_mxnet = features_mxnet.asnumpy()

features_keras最后的数据就是最后的结果

四. 结论

在预处理相同操作的情况下,比较了很多层基本上都是相同的,以最后一层为例,其误差量级是e-13左右,差值的方差是e-17左右。

参考:

[1]. https://github.com/Microsoft/MMdnn

[2]. https://github.com/Microsoft/MMdnn/blob/master/docs/keras2cntk.md

[3]. https://blog.csdn.net/u010414386/article/details/55668880

利用MMdnn对比keras和mxnet的更多相关文章

  1. 常用深度学习框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/ TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tenso ...

  2. MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)

    MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...

  3. Tensorflow1.4 高级接口使用(estimator, data, keras, layers)

    TensorFlow 高级接口使用简介(estimator, keras, data, experiment) TensorFlow 1.4正式添加了keras和data作为其核心代码(从contri ...

  4. Keras:

    https://keras.io/zh/layers/core/ keras使用稀疏输入进行训练 2018.06.14 12:55:46字数 902阅读 760 稀疏矩阵 稀疏矩阵是指矩阵中数值为0的 ...

  5. ML平台_微博深度学习平台架构和实践

    ( 转载至: http://www.36dsj.com/archives/98977)  随着人工神经网络算法的成熟.GPU计算能力的提升,深度学习在众多领域都取得了重大突破.本文介绍了微博引入深度学 ...

  6. 深度学习常用数据集 API(包括 Fashion MNIST)

    基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...

  7. Speech Enhancement via Deep Spectrum Image Translation Network

    文中提出了一种深度网络来解决单通道语音增强问题. 链接:https://arxiv.org/abs/1911.01902 简介 因为背景噪声和混响的存在,录音通常会被扭曲,会对后端的语音识别等技术产生 ...

  8. Tensorflow 介绍和安装

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:AI小昕 本系列教程将手把手带您从零开始学习Tensorfl ...

  9. Deep Learning部署TVM Golang运行时Runtime

    Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型.TVM支持来自Te ...

随机推荐

  1. python学习day16 模块(汇总)

    模块(总) 对于range py2,与py3的区别: py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建. py3:range() 不 ...

  2. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

  3. 第四周博客作业<西北师范大学|李晓婷>

    1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:www.cnblogs.com/nwnu-daizh/p/10487329.html 3.本周点评 ...

  4. Windows 10中Oracle数据库导出到Access数据库(MDB)

    本篇博文简单介绍将Oracle数据库中表导出到Access数据库(主要是MDB格式)的方法.主要有三种,分别是PL/SQL.ESFDatabaseMigrationToolkit及ODBC. PL/S ...

  5. python的socket解析

    1.实现一对一的进行沟通交流 (1).服务端代码如下: import socket server = socket.socket() server.bind(("localhost" ...

  6. 对于iOS架构的认识过程

    MVC 经典就是经典,没有之一.iOS中MVC架构,看懂斯坦福大学白胡子老头这张图基本上就可以了.   斯坦福大学MVC架构.png 简单理解,就是Controller对象拥有View和Model对象 ...

  7. Spring Cloud微服务实践之路- Eureka Server 中的第一个异常

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...

  8. 提取 linux 文件目录结构

    提取 linux  文件的目录结构 find /home/user1/ -type d |while read line ;do mkdir -p /home/user2/$line;done

  9. FT View SE联合Studio 5000仿真

    ​前言:一个实际的自动化项目,都是综合性的,不仅需要PLC进行逻辑.顺序.运动等控制,还需要在上位机进行监视和操作.当没有物理PLC时,上位机软件就无法连接到实际的变量数据,开发出来的界面和功能无法验 ...

  10. dsp实验一 常见问题教程

    1.选择合适阅读材料:卖油翁.将进酒,等. 2.录音设备三选一:某种电脑声卡+线上convert/楼月mp3录音软件+格式工厂(我选的)/Matlab (注:这是目前已知的方法,我只用了第二个) 3. ...