7.基于Matlab的AlexNet图像迁移学习

 本文的实验机器为Intel(R)Core(TM) i5-6200U的2.30 GHz CPU、内存为8GB,实现平台是64位的Windows10 Home,算法在Matlab 2018a上实现并运行的。
     图像数据集如果需要的话可以从百度网盘下载,链接:https://pan.baidu.com/s/1l_-962N_FsCcyr2VEJpRCw  提取码:la2d
  本文快速的用MATLAB对自己的图像数据集进行训练和分类,效果非常不错,利用预训练的alexnet网络对新图像集进行迁移学习,分类准确率很高。

首先,要知道AlexNet的输入层大小是2272273的,所以在输入自己的数据之前,需要改变输入矩阵大小,下面定义一个IMAGERESIZE函数承担此任务。

function output = IMAGERESIZE(input)
input = imread(input);
if numel(size(input)) == 2
    input = cat(3,input,input,input);% 用于将图片改为3通道
end
output = imresize(input,[227,227]);
  接着就是卷积神经网络的结构定义了,通过imageDatastore函数将数据集读取。
function predict_transfer_alexnet()
net = alexnet;% 深度学习alexnet经典网络结构,没有的可以去matlab center下载
trainsferLayer = net.Layers(1:end-3);
 
imds = imageDatastore('.\train_images',...
    'includeSubfolders',true,...
    'labelsource','foldernames','ReadFcn',@IMAGERESIZE);
%第一个参数./images表示文件所在的路径;
%includesubfolders:是否继续读取子文件夹中的图像数据;与后面的true相对应
%labelsource:图像 label 的来源;与后面的foldername相对应
T = countEachLabel(imds);%用于计算各类图像的数量
disp(T);
[imdsTrain,imdsTest] = splitEachLabel(imds,0.75);% 75%的数据为训练数据,其余的为测试数据
 
%% train
layers = [trainsferLayer;
    fullyConnectedLayer(5,'WeightLearnRateFactor',50,'BiasLearnRateFactor',50);%注意第一个参数为类别的数量,我这里是5
    softmaxLayer();
    classificationLayer()];
options = trainingOptions('sgdm',...
    'Maxepochs',5,...
    'InitialLearnRate',0.0001);
network = trainNetwork(imdsTrain,layers,options);
 
%% predict
predictLabels = classify(network,imdsTest);
testLabels = imdsTest.Labels;
 
accuracy = sum(predictLabels == testLabels)/numel(predictLabels);
disp(['accuracy:',num2str(accuracy)]); % 输出预测精度结果
 
end

其分类准确率如图所示:


7.基于Matlab的AlexNet图像迁移学习_第1张图片
image.png

你可能感兴趣的:(7.基于Matlab的AlexNet图像迁移学习)