【图像分类】基于卷积神经网络实现花朵图像分类附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电子书和数学建模资料
相关文章
|
20天前
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
37 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
18天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
75 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
25天前
|
机器学习/深度学习 编解码 自动驾驶
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
61 16
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
25天前
|
机器学习/深度学习 存储
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
61 15
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
22天前
|
机器学习/深度学习
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
55 8
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
|
21天前
|
机器学习/深度学习 编解码 移动开发
RT-DETR改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
RT-DETR改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
36 5
RT-DETR改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
|
25天前
|
机器学习/深度学习 编解码 移动开发
YOLOv11改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
YOLOv11改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
29 7
YOLOv11改进策略【Conv和Transformer】| TPAMI-2024 Conv2Former 利用卷积调制操作和大核卷积简化自注意力机制,提高网络性能
|
20天前
|
机器学习/深度学习
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
50 11
|
20天前
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
43 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
2月前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
161 10

热门文章

最新文章