MATLAB + 深度学习 = 炸裂!10 分钟训练你的第一个图像识别模型
·
1. 📁 数据准备(使用 MATLAB 内置示例集)
MATLAB 提供了一个非常适合入门的图像分类数据集:手写数字 (digitDataset)。
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true, ...
'LabelSource','foldernames');
countEachLabel(imds)
结果说明
-
这是一个 0–9 十类的图片数据集
-
每张图片为 28×28 的灰度图
-
全部图片已按分类存放,不需要你自己整理
2. 📊 训练集 & 测试集划分
[imdsTrain, imdsTest] = splitEachLabel(imds, 0.7, 'randomized');
这行代码说明:
-
70% 用于训练
-
30% 用于测试
-
自动随机打乱
3. 🧠 搭建一个简单的 CNN(卷积神经网络)
MATLAB 提供了高层封装,不用写算子、不用写卷积代码。
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
网络说明:
-
2 个卷积模块(Conv + BN + ReLU)
-
1 个最大池化层
-
最终用
fullyConnectedLayer(10)输出 10 类
适合入门,速度快、准确率高。
4. ⚙️ 设置训练参数(关键就两行)
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.01, ...
'MaxEpochs',4, ...
'MiniBatchSize',64, ...
'Plots','training-progress', ...
'Verbose',false);
解释一下:
-
SGDM:常用优化算法
-
MaxEpochs=4:只训练 4 轮,速度极快 -
Plots='training-progress':自动生成训练曲线
5. 🚀 开始训练你的第一个深度学习模型
net = trainNetwork(imdsTrain, layers, options);
只要写这一行,MATLAB 会自动完成:
-
前向传播
-
反向传播
-
梯度更新
-
可视化曲线
-
GPU 自动加速(如果你有 GPU)
真正做到 10 分钟跑出结果。
6. 📈 模型效果评估
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = sum(YPred == YTest) / numel(YTest);
disp("测试集准确率:" + accuracy);
一般来说,这个小网络在该数据集上能达到:
👉 97% 左右准确率
7. 🔍 单张图像预测(最有成就感的一步)
你会看到:
图像显示 + 自动识别结果
真正做到了 “像调用一个函数一样实现 AI”。
8. 📦 完整代码
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath,'IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain, imdsTest] = splitEachLabel(imds,0.7,'randomized');
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.01, ...
'MaxEpochs',4, ...
'MiniBatchSize',64, ...
'Plots','training-progress', ...
'Verbose',false);
net = trainNetwork(imdsTrain, layers, options);
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = sum(YPred == YTest)/numel(YTest);
disp("测试集准确率:" + accuracy);
img = readimage(imdsTest, 1);
imshow(img)
label = classify(net,img);
title("预测结果:" + string(label))
🎯 9. 总结:为什么 MATLAB 非常适合深度学习入门?
-
无需处理复杂的数据加载
-
无需写神经网络底层代码
-
可视化训练曲线自动生成
-
GPU 自动识别与加速
-
内置大量示例数据集
更多推荐
所有评论(0)