当前位置:   article > 正文

matlab调用alex,7.基于Matlab的AlexNet图像迁移学习

6200u运行matlab

本文的实验机器为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

其分类准确率如图所示:

6e52cc75f666

image.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/546162
推荐阅读
相关标签
  

闽ICP备14008679号