MatConvnet工具箱文档翻译理解(4)
第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工具箱文档翻译理解(4)相关推荐
- MatConvnet工具箱文档翻译理解(3)
第2章 神经网络计算 本章简要介绍了神经网络的计算方面,尤其是卷积神经网络,强调了理解和使用MatConvNet所需的概念. 2.1概述 神经网络(NN)是将数据x(例如图像)映射到输出向量y(例如图 ...
- MatConvnet工具箱文档翻译理解(2)
1.2 MatConvNet一目了然 MatConvNet具有简单的设计理念. 它不是将CNN包裹在软件的复杂层上,而是暴露了直接作为MATLAB命令的计算CNN构造块的简单函数,例如线性卷积和ReL ...
- MatConvnet工具箱文档翻译理解(1)
概述 MatConvNet是用于MATLAB的卷积神经网络(CNN)的实现.工具箱的设计注重简单性和灵活性.它将CNN的构建块暴露为易于使用的MATLAB函数,提供用于计算具有过滤器组的线性卷积,特征 ...
- Xilinx技术文档翻译理解汇总
- 关于Matconvnet中模型发布与共享的思考
1. 前言 现阶段还坚持使用Matconvnet工具箱的一定是MATLAB的死粉.与TensorFlow.Keras相比,matconvnet的便捷性不够.但是,matlab与matconvnet提供 ...
- 如何使用Sheffield大学的Matlab GA遗传算法工具箱
本文假设阅读本文章的各位已经安装好工具箱,并基于个人对Sheffield工具箱的理解,以1.2版本的工具箱为例,对函数进行简单讲解. SheffieldGA工具箱在CONTENTS.M文件中给出其工具 ...
- MATLAB机器人工具箱【1】——建模+正逆运动学+雅克比矩阵
MATLAB机器人工具箱[1]-- 机械臂建模+正逆运动学+雅克比矩阵 1. 二维空间位姿描述 2. 三维空间位姿描述 3. 建立机器人模型 3.1 Link 类 3.2 SerialLink 类 3 ...
- MATLAB机器人工具箱【3】—— 动力学相关函数及用法
MATLAB机器人工具箱[3]-- 动力学相关函数及用法 1. 查看机器人动力学参数 2. 逆动力学 3. 正动力学 4. 机器人动力学方程 5. 赋予机器人动力学参数 本文在参考B站up主刘海涛大佬 ...
- SiamFC代码配置复现 matlab版本
原创 SiamFC代码配置复现 2019-04-29 22:18:06 ZZXin_ 阅读数 1603更多 分类专栏: 深度学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...
最新文章
- LeetCode Algorithm 剑指 Offer 28. 对称的二叉树
- vim树形目录NERDTree
- CodeForces - 817F Graph and String(dfs判二分图)
- TensorFlow2-生成对抗网络
- SAP UI5 application component运行时加载的奥秘
- 7-2 港口审查 (15 分)
- 使用Spring Security和jdbc的Spring Boot第2部分
- 兼容的min-height
- php 第一次创建文件时延迟4秒 sleep用法
- clocks_per_sec 时间不正确_壁挂炉不用了怎么关?壁挂炉正确的关闭方法
- php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法
- s-palindrome
- 为什么我不建议你用去 “ ! = null “ 做判空?
- 对可道云KodExplorer去掉版权简单破解方法
- 回溯法求解TSP问题(旅行商问题)
- Ubuntu18 安装MeshLab软件
- 致计算机专业准大一新生
- 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
- 生活都不容易,如果你感觉生活很苦,那就说明你在吃苦,同样,如果你感觉生活有奔头,那就是在努力。
- ivew 的offset用法