matconvnet简介安装与使用
2017-12-05 23:26
295 查看
转自博客:http://blog.csdn.net/on2way/article/details/52959102
各类框架自己去选择吧,这里想说一下的是其中一个用于研究领域较多的一个框架Matconvnet,这个框架是基于matlab写的,matlab懂得,研究用的,方便简单。
首先贴一下
(众多说明教程都可以去里面找到)
点进去就可以下载安装包了。
下载完解压到一个路径,接着就到安装这一步了。
安装之前确认需要安装:
(1)vs安装;
(2)需要用GPU加速的还需要安装cuda;
紧接着用Matlab打开到这个解压路径,安装。步骤就不重复了,贴上网络资源:
ok上述两个介绍的很详细了,关于编译cpu版本还是GPU版本都有说到,编译完以后,理论上没问题应该是在安装目录下的mex下,多出一系列的.mexw64 编译文件,(64位系统),如果没有就证明没有编译成功。
我编译的时候提示有几个函数一直重名,不知道为什么,后来我改了几个函数的名字就可以了,像下面这样,也不知道为什么,如果没有这个错误的同学,自动略过吧:
Ok假设都编译完了,如果有的人电脑实在各种问题编译不出来,我把我编译的cpu与Gpu版本都的放一下:
先来看看如何用训练好的imagenet网络模型进行图像的预测,英文版的官网教程就在这里:
http://www.vlfeat.org/matconvnet/quick/
检测图像分类之前,首先需要训练好的模型,官网也提供了各式各样的网络模型,下载如下:
http://www.vlfeat.org/matconvnet/pretrained/
这里可以看到一堆的模型,我们先下载一个“imagenet-vgg-f ”试一下,
就放在安装包文件夹外面
好了,将matconvnet整个文件夹添加到路径(假设已经编译好了)。
在这个目录下建一个m函数,输入下面代码,运行就可以了:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
最高得分0.704,结果为辣椒。还可以。
MatConvNet中mnist源码解析
可以自己去看代码,就不解释了。这里假设代码看懂了,那么我抽象出来这个模型结构就像下面这样:
可以这个模型的结构依次为:输入-卷积1-pool1-卷积2-pool2-卷积2-relu-卷积4(也可以是全连接层)-sofrmax分类。
根据代码中的结构定义,我们也可以推算出每一层的输出大小(上述图)。
这里需要注意的是,这个网络层的设计大小一定要吻合。比如,经过一系列的卷积pool后,到全连接层时,输入一定要是1*1*X*X,且上一层的map,和下一层的卷积数map一定要一样。比如输入为28*28*1,那么第一个卷积核是5*5*1*20,这个1就是上一层的只有一个图。再往下走卷积为5*5*20*50,这里为什么是20,因为上一层的map有20个。一次类推,计算到最后正好为1*1*500,这样才可以全连接层。如果你自己设计网络,自己计算一下一定要保证后面全连接层时输入为1*1*X*X,否则会训练错误。
Ok,这里说到这,下面在更直观看下网上别人分享的一个网络(当然输入大小错了,中间大小也错了,但是结构类似)
好了,模型训练完了,那么怎么测试呢?
这个数据集本身也分了训练集与测试集,下面我们来测试一下测试集的准确率。建一个m脚本,函数如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
解释一下,中间有一块需要改变最后一层的名字变为softmax,这样才是测试用的。
测试样本可以看到为10000,这样运行一下结果如下:
accurcy = 96.97%
可见准确率还是挺高的。在这个序列的前几篇,曾经也用另外一个深度学习工具箱做过mnist的实验(感兴趣可以去看)
在那里用的是自编码以及pca等方法,都不能得到像现在这样的准确率。
进一步索引对网上大牛对Matconvnet中一些函数的详细解释:
注释详细至极,同时这个网站的众多好资源,表示感谢。
最后分享一个网上将这个代码转变为c++代码的测试方法,觉得很好。
十个值得一试的开源深度学习框架
各类框架自己去选择吧,这里想说一下的是其中一个用于研究领域较多的一个框架Matconvnet,这个框架是基于matlab写的,matlab懂得,研究用的,方便简单。首先贴一下
Matconvnet的主页
(众多说明教程都可以去里面找到)点进去就可以下载安装包了。
下载完解压到一个路径,接着就到安装这一步了。
安装之前确认需要安装:
(1)vs安装;
(2)需要用GPU加速的还需要安装cuda;
紧接着用Matlab打开到这个解压路径,安装。步骤就不重复了,贴上网络资源:
MatConvNet教程—– Win7下编译和配置详解
ok上述两个介绍的很详细了,关于编译cpu版本还是GPU版本都有说到,编译完以后,理论上没问题应该是在安装目录下的mex下,多出一系列的.mexw64 编译文件,(64位系统),如果没有就证明没有编译成功。我编译的时候提示有几个函数一直重名,不知道为什么,后来我改了几个函数的名字就可以了,像下面这样,也不知道为什么,如果没有这个错误的同学,自动略过吧:
Ok假设都编译完了,如果有的人电脑实在各种问题编译不出来,我把我编译的cpu与Gpu版本都的放一下:
Matconvnet cpu版本 (64位系统)
Matconvnet gpu版本 (cuda7.5编译64位系统)
先来看看如何用训练好的imagenet网络模型进行图像的预测,英文版的官网教程就在这里:http://www.vlfeat.org/matconvnet/quick/
检测图像分类之前,首先需要训练好的模型,官网也提供了各式各样的网络模型,下载如下:
http://www.vlfeat.org/matconvnet/pretrained/
这里可以看到一堆的模型,我们先下载一个“imagenet-vgg-f ”试一下,
就放在安装包文件夹外面
好了,将matconvnet整个文件夹添加到路径(假设已经编译好了)。
在这个目录下建一个m函数,输入下面代码,运行就可以了:
% Load a model and upgrade it to MatConvNet current version. % 导入下载的模型 net = load('imagenet-vgg-f.mat') ; %将其变为simplenn的网络 %matconvnet有两种网络:还有一种为DAG 模型, % 两个网络的不同之处在于将网络以不同的形式显示出来,后者DAG 会更直观 net = vl_simplenn_tidy(net) ; % Obtain and preprocess an image. %读一张图,matlab自带 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 ; % Run the CNN. % 然后把图像带进去运行一下就ok了 res = vl_simplenn(net, im_) ; %把结果显示出来 % 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
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
最高得分0.704,结果为辣椒。还可以。
MatConvNet中mnist源码解析
可以自己去看代码,就不解释了。这里假设代码看懂了,那么我抽象出来这个模型结构就像下面这样:
可以这个模型的结构依次为:输入-卷积1-pool1-卷积2-pool2-卷积2-relu-卷积4(也可以是全连接层)-sofrmax分类。
根据代码中的结构定义,我们也可以推算出每一层的输出大小(上述图)。
这里需要注意的是,这个网络层的设计大小一定要吻合。比如,经过一系列的卷积pool后,到全连接层时,输入一定要是1*1*X*X,且上一层的map,和下一层的卷积数map一定要一样。比如输入为28*28*1,那么第一个卷积核是5*5*1*20,这个1就是上一层的只有一个图。再往下走卷积为5*5*20*50,这里为什么是20,因为上一层的map有20个。一次类推,计算到最后正好为1*1*500,这样才可以全连接层。如果你自己设计网络,自己计算一下一定要保证后面全连接层时输入为1*1*X*X,否则会训练错误。
Ok,这里说到这,下面在更直观看下网上别人分享的一个网络(当然输入大小错了,中间大小也错了,但是结构类似)
好了,模型训练完了,那么怎么测试呢?
这个数据集本身也分了训练集与测试集,下面我们来测试一下测试集的准确率。建一个m脚本,函数如下:
% 导入全体数据 load('D:\myself\matlab\matlab_documents\matconvnet_test\matconvnet\data\mnist-baseline-simplenn\imdb.mat'); % 挑选出测试集 test_index = find(images.set==3); % 挑选出样本以及真实类别 test_data = images.data(:,:,:,test_index); test_label = images.labels(test_index); %导入模型文件 load('D:\myself\matlab\matlab_documents\matconvnet_test\matconvnet\data\mnist-baseline-simplenn\net-epoch-20.mat'); % 将最后一层改为 softmax (原始为softmaxloss,这是训练用) net.layers{1, end}.type = 'softmax'; % net = vl_simplenn_tidy(net) ; for i = 1:length(test_label) i im_ = test_data(:,:,:,i); im_ = im_ - images.data_mean; res = vl_simplenn(net, im_) ; scores = squeeze(gather(res(end).x)) ; [bestScore, best] = max(scores) ; pre(i) = best; end % 计算准确率 accurcy = length(find(pre==test_label))/length(test_label); disp(['accurcy = ',num2str(accurcy*100),'%']);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
解释一下,中间有一块需要改变最后一层的名字变为softmax,这样才是测试用的。
测试样本可以看到为10000,这样运行一下结果如下:
accurcy = 96.97%
可见准确率还是挺高的。在这个序列的前几篇,曾经也用另外一个深度学习工具箱做过mnist的实验(感兴趣可以去看)
深度学习系列(八):自编码网络多层特征学习
在那里用的是自编码以及pca等方法,都不能得到像现在这样的准确率。进一步索引对网上大牛对Matconvnet中一些函数的详细解释:
MatConvNet 庖丁解牛
注释详细至极,同时这个网站的众多好资源,表示感谢。最后分享一个网上将这个代码转变为c++代码的测试方法,觉得很好。
C++使用matlab卷积神经网络库MatConvNet来进行手写数字识别
相关文章推荐
- 渗透测试工具Immunity CANVAS使用安装简介
- Intel ICH7R SATA RAID(阵列)安装使用简介
- TortoiseSVN使用简介(1/9)安装及下载client(客户)端
- AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁)
- gearman简介及安装使用
- fireBug 简介,安装和使用方法(转)
- 渗透测试工具Immunity CANVAS使用安装简介
- Python开发之扩展库的安装指南及Suds(Webservice)的使用简介
- MongoDB入门1——简介、安装及基本使用
- MongoDB入门1――简介、安装及基本使用
- byobu "屏风" 简介 ,以及在CentOS下安装及日常使用
- Android NDK安装及使用简介
- SvnServer安装使用简介
- WordPress系统的安装和使用简介
- MinGW安装与使用简介
- IPControl安装及API使用简介
- 渗透测试工具Immunity CANVAS使用安装简介
- svn服务端的安装与使用方式简介(一)
- WordPress系统的安装和使用简介
- AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁)