机器学习(基于MATLAB的Alexnet迁移学习进行猫狗分类)

敏英玮 2022-09-25 13:24:03

习题案例源自作者:https://blog.csdn.net/garker?type=blog

 

软件:matlab2022a

数据集:kaggle猫狗数据集

网络:Alexnet

数据集准备:【数据集度云链接】
链接:https://pan.baidu.com/s/17c4K04kDKDUsuXdLkPecKA
提取码:8rhn

(D:/machine learning/Kaggle/test1&train)

说明:获取数据集后对其进行分类(训练集、测试集),对图片大小调整后,将训练集按照7:3进行分割,而后读取网络alexnet并组建新网络,然后训练、测试alexnet网络

一、打开matlab点击新建,新建后打开文件夹D:/machine learning/Kaggle/test1&train,代码放入后点击运行,因为数据集较大,所以运行时间较长。

 二、完整代码

imds = imageDatastore('D:\machine learning\Kaggle\train', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

numTrainImages = numel(imds.Labels);

for i = 1:numTrainImages
    s = string(imds.Files(i));
    I = imread(s);
    I = imresize(I,[227,227]);
    imwrite(I,s);
    s
end

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

net = alexnet;

inputSize = net.Layers(1).InputSize

layersTransfer = net.Layers(1:end-3);

numClasses = numel(categories(imdsTrain.Labels));

layers = [
    layersTransfer
    fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
    softmaxLayer
    classificationLayer];

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsValidation);
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
options = trainingOptions('sgdm', ...
    'MiniBatchSize',10, ...
    'MaxEpochs',10, ...
    'InitialLearnRate',1e-4, ...
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValidation, ...
    'ValidationFrequency',3, ...
    'Verbose',false, ...
    'Plots','training-progress');

netTransfer = trainNetwork(augimdsTrain,layers,options);

三、训练结果

 训练结果准确率92%左右

 四、遇到的问题

代码报错:函数或变量无法识别(augimdsTrain函数解决示例);Alexnet网络的安装,

 

 

 

 

...全文
286 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

49

社区成员

发帖
与我相关
我的任务
社区描述
产学研究,学术传承
社区管理员
  • 又菜又爱玩呜呜呜~
  • 两年半的个人练习生^_^
  • yolanda19910002
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧