零基础学习simulink--在 MATLAB 中构建和训练一个简单的卷积神经网络(CNN)模型

目录

步骤概述

详细步骤

1. 加载数据集

2. 数据预处理

3. 定义网络结构

4. 设置训练选项

5. 训练模型

6. 测试模型

完整代码

运行代码

结果解释


基于 MATLAB 的卷积神经网络(CNN)实例,用于图像分类任务。我们将使用 CIFAR-10 数据集来训练一个简单的 CNN 模型,并评估其性能。

步骤概述

  1. 加载数据集
  2. 数据预处理
  3. 定义网络结构
  4. 设置训练选项
  5. 训练模型
  6. 测试模型

详细步骤

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)模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值