第3章 包装器和预训练模型

这是很容易的组合第4章“手动”的计算块,但通常通过一个包装器来使用它们可以实现CNN架构给定一个模型规范通常更方便,可用的包装器总结在3.1节。 
MatConvNet还附带了许多用于图像分类的预训练模型(其中大多数 
在ImageNet ILSVRC挑战上训练),图像分割,文本点样和面部识别。 这些使用非常简单,如3.2节所示。

3.1包装

MatConvNet提供了两个包装器:用于基本链块链(3.1.1节)的SimpleNN和用于更复杂的直接非循环图(参见3.1.2节)的块的DagNN。

3.1.1 SimpleNN

SimpleNN包装器适用于由计算块的线性链组成的网络。 它主要由vl_simplenn函数(对CNN及其派生的评估)以及一些其他支持函数(例如vl_simplenn_move(移动CPU和GPU之间的CNN)和vl_simplenn_display(获得和/或打印关于CNN的信息)实现)。

vl_simplenn接收表示CNN的结构网络作为输入,以及输入x和潜在输出导数dzdy,这取决于操作模式。 有关输入和输出格式的详细信息,请参阅vl_simplenn函数的内联帮助。 实际上,vl_simplenn的实现是如何可以一起使用基本神经网络构建块的良好示例,并且可以作为更复杂实现的基础。

3.1.2 DagNN

DagNN包装器比SimpleNN更复杂,因为它必须支持任意图形拓扑。 它的设计是面向对象的,有一个类实现每个层类型。 虽然这增加了复杂性,并且使得微小的CNN架构(例如MNIST)的包装器稍微更慢,但是实际上它更加灵活和更容易扩展。 
DagNN由dagnn.DagNN类(在dagnn命名空间下)实现。

3.2 Pre-trained models

vl_simplenn易于使用预训练模型(见主页下载一些)。 
例如,以下代码下载在ImageNet数据上预先训练的模型,并将其应用于MATLAB库存图像之一:

% setup MatConvNet in MATLAB
run matlab/vl_setupnn
% download a pretrained CNN from the web
urlwrite(...
'http://www.vlfeat.org/matconvnet/models/imagenet-vgg-f.mat', ...
'imagenet-vgg-f.mat');
net = load('imagenet-vgg-f.mat') ;
% obtain and preprocess an image
im = imread('peppers.png') ;
im_ = single(im) ; % note: 255 range
im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ;
im_ = im_-net.meta.normalization.averageImage ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

请注意,在运行网络之前应对图像进行预处理。 虽然预处理规范取决于模型,但预训练模型包含描述预期预处理类型的网络规范化场。 特别要注意的是,该网络将固定大小的图像作为输入,并且需要去除平均值; 此外,图像强度在[0,255]的范围内归一化。 
下一步是运行CNN。 这将返回一个res结构的输出网络层:

%run the CNN
res = vl_simplenn(net, im_) ;
  • 1
  • 2

最后一层的输出可用于分类图像。 为了方便起见,类名称包含在网络结构中:

% show the classification result
scores = squeeze(gather(res(end).x)) ;
[bestScore, best] = max(scores) ;
figure(1) ; clf ; imagesc(im) ;
title(sprintf('%s (%d), score %.3f',···net.meta.classes.description{best}, best, bestScore)) ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意,几个扩展是可能的。 首先,图像可以裁剪而不是重新定标。 第二,多种裁剪可以喂给网络和结果平均,通常为改进的结果。 第三,网络的输出可以用作图像编码的通用特征。

3.3学习模型

由于MatConvNet可以使用反向传播计算CNN的导数,因此使用它实现学习算法很简单。 因此,随机梯度下降的基本实现是简单的。 
示例代码在examples / cnn_train中提供。这个代码是足够的,以允许在NMINST,CIFAR,ImageNet和其他许多数据集上训练。相应的示例在examples /目录中提供。

3.4运行大规模实验

对于大规模实验,例如为ImageNet学习网络,强烈建议使用NVIDIA GPU(至少6GB内存)和足够的CPU和磁盘速度。 例如,要在ImageNet上训练,我们建议如下: 
1.下载ImageNet数据http://www.imagenet.org/challenges/LSVRC。 安装它在某个地方,并从数据/ imagenet12链接到它 
2.考虑预处理数据以将所有图像转换为高度为256像素。这可以通过提供的utils / preprocess-imagenet.sh脚本来完成。 在这里方式,训练不必每次都调整图像的大小。 不要忘记指向将训练代码转换为预处理数据。 
3.考虑将数据集复制到RAM磁盘(前提是您有足够的内存),以便更快地访问。 不要忘记将训练代码指向此副本。 
4.编译MatConvNet与GPU支持。 有关说明,请参阅主页。 
一旦你的设置准备好了,你应该能够运行examples /cnn_imagenet(编辑并根据需要更改任何标志以启用GPU支持和多个映像预取线程)。如果一切顺利,你应该期望能够训练与200-300图像/秒。

MatConvnet工具箱文档翻译理解四相关推荐

  1. MatConvnet工具箱文档翻译理解(3)

    第2章 神经网络计算 本章简要介绍了神经网络的计算方面,尤其是卷积神经网络,强调了理解和使用MatConvNet所需的概念. 2.1概述 神经网络(NN)是将数据x(例如图像)映射到输出向量y(例如图 ...

  2. MatConvnet工具箱文档翻译理解(2)

    1.2 MatConvNet一目了然 MatConvNet具有简单的设计理念. 它不是将CNN包裹在软件的复杂层上,而是暴露了直接作为MATLAB命令的计算CNN构造块的简单函数,例如线性卷积和ReL ...

  3. MatConvnet工具箱文档翻译理解(1)

    概述 MatConvNet是用于MATLAB的卷积神经网络(CNN)的实现.工具箱的设计注重简单性和灵活性.它将CNN的构建块暴露为易于使用的MATLAB函数,提供用于计算具有过滤器组的线性卷积,特征 ...

  4. MatConvnet工具箱文档翻译理解(4)

    第3章 包装器和预训练模型 这是很容易的组合第4章"手动"的计算块,但通常通过一个包装器来使用它们可以实现CNN架构给定一个模型规范通常更方便,可用的包装器总结在3.1节.  Ma ...

  5. MatConvNet卷积神经网络(四)——用自己的数据训练

    尝试过从Matconvnet官网上下载的已经训练好的神经网络之后,最近自己训练了能够识别果树上红苹果的神经网络.先上图.源代码放在https://github.com/YunpengZhai/MATC ...

  6. iptables总结--理解四表五链/snat/dnat/redirect/synproxy/性能

    1. iptables四表五链 四表五链: 链就是位置:共有五个 进路由(PREROUTING).进系统(INPUT) .转发(FORWARD).出系统(OUTPUT).出路由(POSTROUTING ...

  7. 深度学习GPU卡的理解(四)

    这一篇是对于卷积的理解<Understanding Convolution in Deep Learning> Convolution is probably the most impor ...

  8. ATF官方文档翻译(四):ATF固件设计(Firmware Design)(1)-冷启动

    1.固件设计-前言 Trusted Firmware-A(TF-A)实现了Trusted Board Boot Requirements(TBBR)平台设计的一个子集 Arm参考平台的文档(PDD). ...

  9. Hermez官方文档翻译(四)开发者-SDK (有自己测试验证demo)

    文章目录 SDK SDK介绍 npm安装 Import modules 导入模块 创建交易池 连接以太坊网络 检查令牌存在于Hermez网络中 创建钱包 将以太坊代币存入Hermez网络 Verify ...

  10. Xilinx技术文档翻译理解汇总

最新文章

  1. WebStorm 2017.1增加对Vue.js的支持
  2. Angular Component的默认changeDetection策略
  3. 六元均匀直线阵的各元间距为_梦得杯—镀覆技术论文大赛丨微机电系统器件电镀镍厚度均匀性的模拟与改进【刘瑞 许文杰 袁妍妍】...
  4. java 蓝桥杯算法训练 P1102
  5. php 动态 常量,PHP中的动态常量?
  6. 拓端tecdat|python深度学习实现自编码器Autoencoder神经网络异常检测心电图ECG时间序列
  7. java递归 杨辉三角_java杨辉三角递归实现
  8. 清风数学建模学习笔记——TOPSIS法(优劣解距离法)
  9. Linux搭建Redis集群(搭建集群必看)
  10. Windows资源监控工具汇总
  11. 零门槛人像转卡通、GIF表情包,这个项目不仅开源,还做成了小程序
  12. 爱快云微信连wifi3.1用户前期准备工作
  13. switch的使用及注意事项
  14. 游戏开发中常见的几种碰撞检测
  15. 剪切的东西不见了怎么找回来?
  16. 静夜思:“小微科技公司”如何建立自己的竞争优势
  17. 【总结】大学生寒假社会实践总结-社区志愿关爱模板
  18. 每日一书丨数据治理的这些事儿,90%的人搞不清
  19. liunx系统的根结构认识及命令学习
  20. 红米note7主板电路图_红米Note7Pro手机主板故障案例解析

热门文章

  1. 【机器学习笔记之八】使用朴素贝叶斯进行文本的分类
  2. Struts Tiles 页面模板引擎初实践
  3. Codeforces Round #296 (Div. 1) E. Triangles 3000
  4. CentOs6.5安装使用数据恢复软件extundelete
  5. 下载Visual Studio 2008 Beta 2
  6. MySQL学习笔记:一道group by+group_concat解决的小问题
  7. Jupyter 同时支持python2、python3 kernel
  8. python日记----2017.7.20
  9. 团“模子”政策模式乱舞
  10. linux下关于程序性能和系统性能的工具、方法