【图像分类】基于卷积神经网络实现花朵图像分类附matlab代码

简介: 【图像分类】基于卷积神经网络实现花朵图像分类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

在图片搜索应用中,与基于时间,地点或关键词查找等成熟的搜索方式相比,基于图片内容的搜索具有更加直观快捷的特点.因此,利用图像分类技术实现基于图像内容的搜索成为一个日益受到关注的研究领域.一般地,机器学习中的分类算法可以分为两类:基于人为构造特征的分类方法,如K近邻算法,支持向量机等;以及以卷积神经网络为基础的,不需要人为设计特征的深度学习方法.

⛄ 部分代码

%% Flower Classifier using a CNN and data augmentation


%% PART 1: Baseline Classifier

%% Create image data store

imds = imageDatastore(fullfile('Flowers'),...

'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');


% Count number of images per label and save the number of classes

labelCount = countEachLabel(imds);

numClasses = height(labelCount);


%% Create training and validation sets

[imdsTrainingSet, imdsValidationSet] = splitEachLabel(imds, 0.7, 'randomize');


%% Build a simple CNN

imageSize = [227 227 3];


% Specify the convolutional neural network architecture.

layers = [

   imageInputLayer(imageSize)

   

   convolution2dLayer(3,8,'Padding','same')

   batchNormalizationLayer

   reluLayer  

   

   maxPooling2dLayer(2,'Stride',2)

   

   convolution2dLayer(3,16,'Padding','same')

   batchNormalizationLayer

   reluLayer  

   

   maxPooling2dLayer(2,'Stride',2)

   

   convolution2dLayer(3,32,'Padding','same')

   batchNormalizationLayer

   reluLayer  

   

   fullyConnectedLayer(4)

   softmaxLayer

   classificationLayer];


%% Specify training options

options = trainingOptions('sgdm', ...

   'MiniBatchSize',10, ...

   'MaxEpochs',6, ...

   'InitialLearnRate',1e-4, ...

   'Shuffle','every-epoch', ...

   'ValidationData',imdsValidationSet, ...

   'ValidationFrequency',3, ...

   'Verbose',false, ...

   'Plots','training-progress');


%% Train the network

net1 = trainNetwork(imdsTrainingSet,layers,options);


%% Report accuracy of baseline classifier on validation set

YPred = classify(net1,imdsValidationSet);

YValidation = imdsValidationSet.Labels;


imdsAccuracy = sum(YPred == YValidation)/numel(YValidation);


%% Plot confusion matrix

figure, plotconfusion(YValidation,YPred)


%% PART 2: Baseline Classifier with Data Augmentation

%% Create augmented image data store

% Specify data augmentation options and values/ranges

imageAugmenter = imageDataAugmenter( ...

   'RandRotation',[-20,20], ...

   'RandXTranslation',[-5 5], ...

   'RandYTranslation',[-5 5]);


% Apply transformations (using randomly picked values) and build augmented

% data store

augImds = augmentedImageDatastore(imageSize,imdsTrainingSet, ...

   'DataAugmentation',imageAugmenter);


% (OPTIONAL) Preview augmentation results

batchedData = preview(augImds);

figure, imshow(imtile(batchedData.input))

   

%% Train the network.

net2 = trainNetwork(augImds,layers,options);


%% Report accuracy of baseline classifier with image data augmentation

YPred = classify(net2,imdsValidationSet);

YValidation = imdsValidationSet.Labels;


augImdsAccuracy = sum(YPred == YValidation)/numel(YValidation);


%% Plot confusion matrix

figure, plotconfusion(YValidation,YPred)


%% PART 3: Transfer Learning without Data Augmentation


%% Load pretrained AlexNet

net = alexnet;


%% Replace final layers

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


layers = [

   layersTransfer

   fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)

   softmaxLayer

   classificationLayer];


%% Train network

options = trainingOptions('sgdm', ...

   'MiniBatchSize',10, ...

   'MaxEpochs',6, ...

   'InitialLearnRate',1e-4, ...

   'Shuffle','every-epoch', ...

   'ValidationData',imdsValidationSet, ...

   'ValidationFrequency',3, ...

   'Verbose',false, ...

   'Plots','training-progress');


netTransfer1 = trainNetwork(imdsTrainingSet,layers,options);


%% Compute accuracy and plot confusion matrix

YPred = classify(netTransfer1,imdsValidationSet);

YValidation = imdsValidationSet.Labels;


netTransfer1BaselineAccuracy = sum(YPred == YValidation)/numel(YValidation);

figure, plotconfusion(YValidation,YPred)


%% PART 4: Transfer Learning with Data Augmentation


%% Train network

netTransfer2 = trainNetwork(augImds,layers,options);


%% Compute accuracy and plot confusion matrix

YPred = classify(netTransfer2,imdsValidationSet);

YValidation = imdsValidationSet.Labels;


netTransfer2BaselineAccuracy = sum(YPred == YValidation)/numel(YValidation);

figure, plotconfusion(YValidation,YPred)

⛄ 运行结果

⛄ 参考文献

[1]李晓普. 基于卷积神经网络的图像分类[D]. 大连理工大学, 2015.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料
相关文章
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
8天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
3月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
121 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
本项目展示了贝叶斯优化在CNN中的应用,包括优化过程、训练与识别效果对比,以及标准CNN的识别结果。使用Matlab2022a开发,提供完整代码及视频教程。贝叶斯优化通过构建代理模型指导超参数优化,显著提升模型性能,适用于复杂数据分类任务。
|
4月前
|
安全 C#
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码