赞
踩
本文的实验机器为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
其分类准确率如图所示:
image.png
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。