1. 前言

现阶段还坚持使用Matconvnet工具箱的一定是MATLAB的死粉。与TensorFlow、Keras相比,matconvnet的便捷性不够。但是,matlab与matconvnet提供了良好的交互调试功能,使得算法开发可以非常迅速得到验证。对于一个训练好的模型,如何迅速的进行测试,这篇博客会开放我对这类问题的处理方法和代码。

2. SimpleNN和 DagNN

参考:http://www.vlfeat.org/matconvnet/mfiles/+dagnn/@DagNN/DagNN/

接触过SimpleNN的童鞋应该记得,SimpleNN是通过struct结构体进行构建的。所以在发布模型或者共享模型的时候可以直接将结构体进行发布,再利用vl_simpnn进行评估就好了。

后来由于Simplenn定义太随性,使得代码非常容易出错。我讲的随性不是灵活,而是结构极其松散。牛津团队为了应付这个事,开始采用DagNN,也就是有向无环图进行网络的定义、训练,但是没有封装一个更好的用于DagNN评估函数。因此,我们只能通过vl_simplenn进行模型评估。也就是说,我们需要将DagNN转成SimpleNN,并去除掉损失函数层。下面开始详细说明我探索出来的一种方法:

首先将网络确定成DagNN类型:

net = dagnn.DagNN.loadobj(net) ; % 'struct' To 'dagnn' 

采用遍历的方式进行信息提取:

function simple_net = deployNet(net)
input = 'target';
output = 'block3x';
simple_net = [];
simple_net.layers = [];
simple_net.meta = net.meta;while ~strcmp(input,output)for i = 1:numel(net.layers)if numel(net.layers(i).inputs) == 1 && strcmp(net.layers(i).inputs{1},input)input = net.layers(i).outputs{1};if isa(net.layers(i).block,'dagnn.Conv')simple_net.layers{end+1} = struct(...'name', net.layers(i).name, ...'type', 'conv', ...'weights', {{net.params(net.getParamIndex(net.layers(i).params{1,1})).value,...net.params(net.getParamIndex(net.layers(i).params{1,2})).value}}, ...'pad', net.layers(i).block.pad, ...'stride', net.layers(i).block.stride,...'dilate',net.layers(i).block.dilate) ;elseif isa(net.layers(i).block,'dagnn.ReLU')simple_net.layers{end+1} = struct(...'name', deal(net.layers(i).name), ...'type', 'relu') ;elseif isa(net.layers(i).block,'dagnn.Pooling')simple_net.layers{end+1} = struct(...'name',  deal(net.layers(i).name), ...'method',deal(net.layers(i).block.method),...'pool',  deal(net.layers(i).block.poolSize),...'stride',deal(net.layers(i).block.stride),...'pad',   deal(net.layers(i).block.pad),...'type',  'pool');elseif isa(net.layers(i).block,'dagnn.LRN')simple_net.layers{end+1} = struct(...'name', deal(net.layers(i).name), ...'type', 'lrn',...'param',net.layers(i).block.param) ;elseerror('No such layer!');endcontinue;endend
end

很多同学问我,为什么要将训练好的模型转成DagNN之后,在进行网络层和网络参数提取。这是因为我需要用DagNN封转好的一些函数,如getParamIndex()简化流程。

一旦训练好的网络得到了如上处理就可以直接用于测试。测试函数为:

res = vl_simplenn(net, instance)

这里需要注意两点: instance要求为single类型;我们需要用gpuArray(instance)将待测试数据放入到GPU中。

3. vl_simplenn解析

在使用vl_simplenn进行模型性能评估之前,我们都会进行如下操作:

net = vl_simplenn_tidy(net)  % matconvnet的版本适应性
res = vl_simplenn(net, inputdata)

http://www.vlfeat.org/matconvnet/mfiles/simplenn/vl_simplenn/

关于Matconvnet中模型发布与共享的思考相关推荐

  1. UE4.18预览第一版发布,共享XR引擎层降低硬件支持难度

    (52VR.com优质翻译) 作为Unreal Engine 4的常规更新,9月22日Epic Games发布了Unreal Engine 4.18版本的第一个预览版,其中包括对iOS 11和增强现实 ...

  2. Django框架(14.Django中模型类的关系,以及模型类关联查询)

    Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...

  3. 发布和共享 MATLAB 代码

    目录 发布和共享 MATLAB 代码 在实时编辑器中创建和共享实时脚本 发布 MATLAB 代码 添加帮助和创建文档 发布和共享 MATLAB 代码 MATLAB® 提供多种向其他人展示代码的选项,包 ...

  4. InfoPath 系列:表单的发布与共享

    上一篇中我们简单的介绍了如果快速创建一张表单,今天继续介绍表单的共享与发布. 先来回顾一下上一篇中创建的表单: 就是这个了,在INFOPATH中有以下几种发布或共享的方式. 1.发布至网络位置或文件共 ...

  5. 深度学习中模型训练效果不好的原因以及防止过拟合的方法

    深度学习中模型训练效果不好的原因 1. 是否选择合适的损失函数 2. 是否选择了合适的Mini-batch size 3. 是否选择了合适的激活函数 4. 是否选择了合适的学习率 5. 优化算法是否使 ...

  6. 基于腾讯云开发微信小程序(新闻发布及共享平台)上

    基于腾讯云开发微信小程序(新闻发布及共享平台)上 文章目录 传统的微信小程序开发 一.云开发是什么? 二.使用步骤 1.创建云环境 2.云数据库的创建 3.云储存 4.云函数 总结 传统的小程序开发 ...

  7. 火车模型发布模式:敏捷和稳定

    在说火车模型之前我们先来说说现有的版本发布模式. 参考乔梁的持续交付2.0中,从特性.时间.质量三个角度总结的三种发布模式: 项目制发布模式(Project Rlease Mode) 传统版本火车模式 ...

  8. 涉及个人数据的发布与共享

    小结 随着企业业务发展和扩大,数据库.大数据平台以及流动过程的数据越来越庞大,业务复杂多变, 其面临的数据安全问题和威胁越来越突出和严,不仅有来自外界的攻击,也有内部管理或错误配置等 引发的数据窃取或 ...

  9. 机器学习中模型参数和模型超参数分别是什么?有什么区别?

    机器学习中模型参数和模型超参数分别是什么?有什么区别? 目录 机器学习中模型参数和模型超参数分别是什么?有什么区别?

最新文章

  1. BootStrap selectpicker
  2. 搭建git for windows服务器(100%可以成功)【转】
  3. 《三毛。。。。》烂漫
  4. Python编程从入门到实践~类
  5. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树
  6. 用C#编程合并多个WORD文档
  7. 水利水电工程施工导截流方案辅助设计系统DivClose软件特色
  8. 手机游戏源码下载的网站
  9. 学生教务系统流程图c语言,教务系统数据流程图绘制
  10. 新加坡全面开放边境,畅游畅游《摘金奇缘》新加坡地标性景点
  11. 【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)
  12. Linux磁盘扩容的操作
  13. 陆军常服军衔佩戴_美国陆军一名兽医如何从英语专业转到全栈开发人员(播客)...
  14. 【小程序动画合集】10种小程序动画效果实现方法,文章太长建议收藏!
  15. Retrofit使用简介
  16. Java实现 蓝桥杯VIP 算法训练 方格取数
  17. 大象装企营销 :市场环境持续低迷,装饰企业该如何破镜重生?
  18. JDK1.7下载httpsw文件报错 Received fatal alert: protocol_version 设置VM参数 -Dhttps.protocols=TLSv1.2
  19. oracle怎么exp怎么用,怎样在Oracle中使用EXP进行逻辑备份?
  20. 显示器窗口分屏双显示器电脑安装指南

热门文章

  1. Win10光驱不见了
  2. maven添加非官方jar包到本地库
  3. jQuery经典面试题及答案精选[转]
  4. qt学习之路3 ---信号与槽机制
  5. 计算机组成原理课后习题答案一
  6. HD_1166敌兵布阵
  7. BestCoder Round #85
  8. poj 2985(并查集+线段树求K大数)
  9. hdu 4289(最小割最大流定理)
  10. ubuntu安装USB转串口驱动(PL2303)