目录
基于 MATLAB 的卷积神经网络(CNN)实例,用于图像分类任务。我们将使用 CIFAR-10 数据集来训练一个简单的 CNN 模型,并评估其性能。
步骤概述
- 加载数据集
- 数据预处理
- 定义网络结构
- 设置训练选项
- 训练模型
- 测试模型
详细步骤
1. 加载数据集
首先,我们需要加载 CIFAR-10 数据集。MATLAB 提供了内置的函数 cifar10
来加载这个数据集。
Matlab
深色版本
% 加载 CIFAR-10 数据集
[XTrain, YTrain] = cifar10;
2. 数据预处理
对数据进行归一化处理,使其适合输入到神经网络中。
Matlab
深色版本
% 归一化数据
XTrain = double(XTrain) / 255;
3. 定义网络结构
接下来,我们定义一个简单的卷积神经网络结构。
Matlab
深色版本
layers = [
imageInputLayer([32 32 3]) % 输入层,输入图像尺寸为 32x32x3
convolution2dLayer(3, 32, 'Padding', 'same') % 3x3 卷积层,32 个滤波器
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数
maxPooling2dLayer(2, 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer(3, 64, 'Padding', 'same') % 3x3 卷积层,64 个滤波器
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数
maxPooling2dLayer(2, 'Stride', 2) % 2x2 最大池化层,步长为 2
fullyConnectedLayer(128) % 全连接层,128 个神经元
reluLayer % ReLU 激活函数
fullyConnectedLayer(10) % 全连接层,10 个神经元(对应 10 个类别)
softmaxLayer % Softmax 层
classificationLayer % 分类层
];
4. 设置训练选项
定义训练选项,包括最大迭代次数、批量大小、初始学习率等。
Matlab
深色版本
options = trainingOptions('adam', ...
'MaxEpochs', 10, % 最大迭代次数
'MiniBatchSize', 128, % 批量大小
'InitialLearnRate', 0.001, % 初始学习率
'Verbose', false, % 不显示详细训练信息
'Plots', 'training-progress'); % 绘制训练进度图
5. 训练模型
使用 trainNetwork
函数训练模型。
Matlab
深色版本
net = trainNetwork(XTrain, YTrain, layers, options);
6. 测试模型
加载测试数据并评估模型的性能。
Matlab
深色版本
% 加载测试数据
[XTest, YTest] = cifar10('test');
% 归一化测试数据
XTest = double(XTest) / 255;
% 进行预测
YPred = classify(net, XTest);
% 计算准确率
accuracy = sum(YPred == YTest) / numel(YTest);
disp(['Test Accuracy: ', num2str(100 * accuracy), '%']);
完整代码
将上述代码段组合在一起,形成一个完整的 MATLAB 脚本:
Matlab
深色版本
% 加载 CIFAR-10 数据集
[XTrain, YTrain] = cifar10;
% 归一化数据
XTrain = double(XTrain) / 255;
% 定义网络结构
layers = [
imageInputLayer([32 32 3])
convolution2dLayer(3, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 64, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(128)
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
% 设置训练选项
options = trainingOptions('adam', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 128, ...
'InitialLearnRate', 0.001, ...
'Verbose', false, ...
'Plots', 'training-progress');
% 训练模型
net = trainNetwork(XTrain, YTrain, layers, options);
% 加载测试数据
[XTest, YTest] = cifar10('test');
% 归一化测试数据
XTest = double(XTest) / 255;
% 进行预测
YPred = classify(net, XTest);
% 计算准确率
accuracy = sum(YPred == YTest) / numel(YTest);
disp(['Test Accuracy: ', num2str(100 * accuracy), '%']);
运行代码
将上述代码保存为一个 .m
文件(例如 cnn_example.m
),然后在 MATLAB 中运行该文件。MATLAB 将加载数据集,训练模型,并评估模型在测试数据上的性能。
结果解释
- 训练进度图:MATLAB 会在训练过程中绘制训练进度图,显示训练损失和验证损失的变化。
- 测试准确率:训练完成后,代码会输出模型在测试数据上的准确率。
通过这个示例,你可以了解如何在 MATLAB 中构建和训练一个简单的卷积神经网络(CNN)模型。