matlab调用alex,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

其分类准确率如图所示:

6e52cc75f666

image.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值