news 2026/5/6 17:45:23

基于MATLAB实现深度学习图像分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MATLAB实现深度学习图像分类

一、环境配置与数据准备

1.1 环境要求
  • MATLAB版本:R2021a及以上(需安装Deep Learning Toolbox)
  • GPU支持:推荐NVIDIA CUDA兼容显卡(通过gpuDevice验证)
1.2 数据组织结构
dataset/├── train/│ ├── cat/│ └── dog/└── validation/├── cat/└── dog/
1.3 数据加载与预处理
% 创建图像数据存储imdsTrain=imageDatastore('dataset/train',...'IncludeSubfolders',true,...'LabelSource','foldernames');imdsValidation=imageDatastore('dataset/validation',...'IncludeSubfolders',true,...'LabelSource','foldernames');% 数据增强(随机旋转±20°,水平翻转)augmenter=imageDataAugmenter(...'RandRotation',[-20,20],...'RandXReflection',true);% 调整图像大小并增强augimdsTrain=augmentedImageDatastore([227227],imdsTrain,'DataAugmentation',augmenter);augimdsValidation=augmentedImageDatastore([227227],imdsValidation);

二、模型构建策略

2.1 迁移学习(推荐方法)
% 加载预训练模型(AlexNet/ResNet-50/EfficientNet)net=alexnet;% 修改网络结构lgraph=layerGraph(net);newFCLayer=fullyConnectedLayer(2,'Name','fc_new','WeightLearnRateFactor',10);newOutputLayer=classificationLayer('Name','output_new');% 替换最后两层lgraph=replaceLayer(lgraph,'fc7',newFCLayer);lgraph=replaceLayer(lgraph,'ClassificationLayer_fc7',newOutputLayer);
2.2 自定义CNN架构
layers=[imageInputLayer([2272273])% 卷积块1convolution2dLayer(3,32,'Padding','same')batchNormalizationLayer reluLayermaxPooling2dLayer(2,'Stride',2)% 卷积块2convolution2dLayer(3,64,'Padding','same')batchNormalizationLayer reluLayermaxPooling2dLayer(2,'Stride',2)% 全连接层fullyConnectedLayer(64)reluLayerdropoutLayer(0.5)% 输出层fullyConnectedLayer(2)softmaxLayer classificationLayer];

三、模型训练与调优

3.1 训练参数配置
options=trainingOptions('adam',...'MaxEpochs',20,...'MiniBatchSize',64,...'InitialLearnRate',0.001,...'Shuffle','every-epoch',...'ValidationData',augimdsValidation,...'ValidationFrequency',30,...'Verbose',false,...'Plots','training-progress',...'ExecutionEnvironment','multi-gpu');% 支持多GPU加速
3.2 模型训练
[netTrained,info]=trainNetwork(augimdsTrain,lgraph,options);
3.3 性能评估
% 验证集预测YPred=classify(netTrained,augimdsValidation);YValidation=imdsValidation.Labels;% 计算准确率accuracy=mean(YPred==YValidation);fprintf('Validation Accuracy:%.2f%%',accuracy*100);% 混淆矩阵cm=confusionchart(YValidation,YPred);cm.Title='Confusion Matrix';cm.ColumnSummary='column-normalized';

四、实战案例:花卉分类

5.1 数据集准备

下载并解压Oxford 102 Flowers数据集,按类别组织文件夹。

5.2 完整代码
% 加载数据[imdsTrain,imdsValidation]=loadFlowerDataset();% 数据增强augmenter=imageDataAugmenter('RandRotation',[-15,15]);augimdsTrain=augmentedImageDatastore([227227],imdsTrain,'DataAugmentation',augmenter);% 迁移学习net=alexnet;lgraph=layerGraph(net);layers=[lgraph.Layers(1:end-3)...% 移除最后3层fullyConnectedLayer(102,'WeightLearnRateFactor',10)...softmaxLayer...classificationLayer];% 训练配置options=trainingOptions('sgdm',...'MaxEpochs',15,...'MiniBatchSize',32,...'InitialLearnRate',0.001,...'ExecutionEnvironment','gpu');% 开始训练netTrained=trainNetwork(augimdsTrain,lgraph,options);% 评估模型YPred=classify(netTrained,imdsValidation);accuracy=mean(YPred==imdsValidation.Labels);

五、模型部署

6.1 MATLAB实时推理
% 加载测试图像img=imread('test_flower.jpg');imgResized=imresize(img,[227227]);% 预测label=classify(netTrained,imgResized);imshow(img);title(sprintf('Predicted: %s (%.2f%%)',label,max(scores)*100));
6.2 生成TFLite模型
converter=dlquantizer(netTrained,'Target','TensorFlow Lite');converter.Optimize=true;converter.Precision='int8';tfliteModel=convert(converter);save('flower_classifier.tflite','tfliteModel');

十、参考

  1. MathWorks官方文档:Deep Learning in MATLAB]ww2.mathworks.cn/help/deeplearning/

  2. 代码 运用深度学习模型实现图像的分类www.3dddown.com/csa/55199.html

  3. AlexNet迁移学习示例:Image Category Classificationww2.mathworks.cn/help/deeplearning/ug/image-category-classification-using-deep-learning.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 7:44:47

汇编语言全接触-28.Win32调试API一

在本教程中,我们将学习Win32提供给开发者的用于调试的原语. 在教程的结尾,我们将学习如何调试一个进程. 下载 例子程序.理论:Win32有一些供程序员使用的API,它们提供相当于调试器的功能. 他们被称作Win32调试API(或原语).利用这些API,我们可以:加载一个程序或捆绑到一个正在运行…

作者头像 李华
网站建设 2026/5/1 3:42:47

nn.layernorm的认识

LayerNorm — PyTorch 2.9 documentation layernorm不是对通道进行归一化。而是对选定维度进行归一化。被选定的维度作为一个整体,计算出方差和均值然后进行对被选定维度进行归一化。 (整体归一化的意思就是,如果把[C, H, W]作为归一化维度…

作者头像 李华
网站建设 2026/5/4 9:06:25

计算机网络体系结构核心知识点整理

计算机网络体系结构核心知识点整理 一、互联网的基本组成 互联网本质是“边缘部分核心部分”的分层结构,两者协同实现全球数据传输: 边缘部分 定义:所有连接到互联网的终端设备(如个人电脑、手机、服务器),…

作者头像 李华
网站建设 2026/4/27 6:02:53

pythonstudy Day36

官方文档的阅读 疏锦行 import pandas as pd import numpy as npfrom sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifierfrom pdpbox import pdp import matplotlib.pyplot as plt import plotly.io as pio pio.renderers.default &qu…

作者头像 李华
网站建设 2026/4/28 9:49:07

(23)声明Bean的注解

负责声明Bean的注解,常见的包括四个: ComponentControllerServiceRepository 源码如下: package com.powernode.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.…

作者头像 李华