MATLAB与深度学习(二)— 训练神经网络(图像分类识别)
上一篇,我们介绍了与深度学习相关的MATLAB工具包。这一篇,我们将介绍如何训练神经网络和相关的基础知识。本文借鉴和引用了网上许多前辈的经验和代码,如有冒犯,请及时与我联系。
1. 下载数据集
以CIFAR-10数据集为例
1.1 方式一,在matlab上下载
%% Download the CIFAR-10 dataset
if ~exist('cifar-10-batches-mat','dir')
cifar10Dataset = 'cifar-10-matlab';
disp('Downloading 174MB CIFAR-10 dataset...');
websave([cifar10Dataset,'.tar.gz'],...
['https://www.cs.toronto.edu/~kriz/',cifar10Dataset,'.tar.gz']);
gunzip([cifar10Dataset,'.tar.gz'])
delete([cifar10Dataset,'.tar.gz'])
untar([cifar10Dataset,'.tar'])
delete([cifar10Dataset,'.tar'])
end
1.2 方式二,直接下载
我运行方式一的代码会报错,所以直接通过下面网址下载后。然后把数据集放在MATLAB的工作路径上。
https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz;链接.
2. 利用CIFAR10数据集 — 迁移学习训练现有网络
以Alexnet为例:图像分类识别
convnet = alexnet;
convnet.Layers % Take a look at the layers
常用网络层
卷积层将输入图像放进一组卷积滤波器,每个滤波器激活图像中的某些特征。
ReLU 层通过将负值映射到零和保持正数值,实现更快、更高效的训练。
池化层通过执行非线性下采样,减少网络需要学习的参数个数,从而简化输出。
全连接层将网络 2D 空间特征“扁平化”为 1D 矢量,为分类目的而表示图像级特征。
Softmax 层为数据集中的每个类别提供概率。
下载完成后,转换数据格式,不然后面会报错:
saveCIFAR10AsFolderOfImages('cifar-10-batches-mat', pwd, true);
数据设置,CIFAR-10数据集可以选择的对象是10种
rootFolder = 'cifar10Train';
categories = {'Deer','Dog','Frog','Cat'};
imds = imageDatastore(fullfile(rootFolder, categories), 'LabelSource', 'foldernames');
imds.ReadFcn = @readFunctionTrain;
% Change the number 50 to as many training images as you would like to use
% how does increasing the number of images change the
% accuracy of the classifier?
[trainingSet, ~] = splitEachLabel(imds, 50, 'randomize');
通过激活来提取数据集的特征
featureLayer = 'fc7';
trainingFeatures = activations(convnet, trainingSet, featureLayer);
训练SVM分类器
temp(:,:)=trainingFeatures ;
temp=temp';
classifier = fitc