当前位置: 首页 > news >正文

基于MATLAB的简单卷积神经网络(CNN)实现代码

基于MATLAB的简单卷积神经网络(CNN)实现代码,用于手写数字分类(MNIST数据集)


一、完整代码实现

%% 1. 数据加载与预处理
% 加载MNIST数据集(需Deep Learning Toolbox)
[XTrain, YTrain] = digitTrain4DArrayData;  % 60,000张28x28训练图像
[XTest, YTest] = digitTest4DArrayData;     % 10,000张测试图像% 数据归一化(0-1范围)
XTrain = double(XTrain)/255;
XTest = double(XTest)/255;% 转换为分类标签(one-hot编码)
YTrain = categorical(YTrain);
YTest = categorical(YTest);%% 2. 定义CNN架构
layers = [imageInputLayer([28 28 1], 'Name', 'input')  % 输入层(28x28灰度图)% 第一卷积块convolution2dLayer(3, 8, 'Padding', 'same', 'Name', 'conv1')  % 3x3卷积,8个滤波器batchNormalizationLayer('Name', 'BN1')        % 批归一化reluLayer('Name', 'relu1')                    % ReLU激活maxPooling2dLayer(2, 'Stride', 2, 'Name', 'pool1')  % 2x2最大池化% 第二卷积块convolution2dLayer(3, 16, 'Padding', 'same', 'Name', 'conv2')  % 3x3卷积,16个滤波器batchNormalizationLayer('Name', 'BN2')reluLayer('Name', 'relu2')maxPooling2dLayer(2, 'Stride', 2, 'Name', 'pool2')% 全连接层fullyConnectedLayer(10, 'Name', 'fc')        % 输出层(10个类别)softmaxLayer('Name', 'softmax')              % Softmax概率转换classificationLayer('Name', 'output');       % 分类输出
];%% 3. 配置训练选项
options = trainingOptions('sgdm', ...          % 带动量的SGD优化器'MaxEpochs', 10, ...                       % 最大训练轮次'MiniBatchSize', 64, ...                   % 小批量大小'Shuffle', 'every-epoch', ...              % 每轮打乱数据'ValidationData', {XTest, YTest}, ...      % 验证数据'ValidationFrequency', 30, ...             % 验证频率'Verbose', false, ...                      % 关闭命令行输出'Plots', 'training-progress');             % 显示训练进度图%% 4. 训练模型
net = trainNetwork(XTrain, YTrain, layers, options);%% 5. 模型评估
YPred = classify(net, XTest);                 % 预测测试集标签
accuracy = sum(YPred == YTest)/numel(YTest);  % 计算准确率
fprintf('测试集准确率: %.2f%%
', accuracy*100);%% 6. 可视化训练过程
figure;
plot(trainingInfo.TrainingLoss);
hold on;
plot(trainingInfo.ValidationLoss);
legend('训练损失', '验证损失');
xlabel('迭代次数'); ylabel('损失值');
title('损失曲线');figure;
plot(trainingInfo.TrainingAccuracy);
hold on;
plot(trainingInfo.ValidationAccuracy);
legend('训练准确率', '验证准确率');
xlabel('迭代次数'); ylabel('准确率(%)');
title('准确率曲线');

二、关键步骤解析

1. 数据预处理

  • 归一化:将像素值从0-255缩放到0-1范围,加速模型收敛

  • 数据增强(可选):可添加旋转、平移等增强操作提升泛化性

    % 数据增强示例
    aug = imageDataAugmenter('RandRotation', [-10,10], 'RandXReflection', true);
    XTrain = augmentedImageDatastore([28 28], XTrain, 'DataAugmentation', aug);
    

2. 网络架构设计

  • 卷积层:提取局部特征(3x3滤波器适合MNIST这类小尺寸图像)

  • 批归一化:加速训练并提升模型稳定性

  • 池化层:降低特征图维度,增强平移不变性

  • 全连接层:最终分类决策

3. 训练优化策略

  • 优化器选择sgdm(带动量SGD)比普通SGD收敛更快

  • 学习率调整:可添加LearnRateSchedule参数实现动态调整

    options = trainingOptions('sgdm', ...'LearnRateSchedule', 'piecewise', ...  % 分段学习率'LearnRateDropFactor', 0.1, ...        % 学习率衰减因子'LearnRateDropPeriod', 5);             % 每5轮衰减一次
    

参考代码 实现简单的CNN程序 www.youwenfan.com/contentcnr/99142.html

三、性能优化

  1. 增加网络深度

    在现有结构中添加更多卷积层(如增加2个卷积块):

    layers(3) = convolution2dLayer(3, 32, 'Padding', 'same', 'Name', 'conv3');  % 新增卷积层
    
  2. 使用预训练模型

    加载ResNet等预训练模型进行迁移学习:

    net = resnet18;  % 加载ResNet18
    lgraph = layerGraph(net);
    newFCLayer = fullyConnectedLayer(10, 'Name', 'fc_new');  % 替换最后全连接层
    lgraph = replaceLayer(lgraph, 'fc1000', newFCLayer);
    
  3. 数据增强增强泛化性

    添加随机噪声和弹性形变:

    aug = imageDataAugmenter(...'RandXReflection', true, ...'RandYReflection', true, ...'RandRotation', [-20,20], ...'RandNoise', 0.02);  % 添加高斯噪声
    

四、结果示例

指标 初始模型 优化后模型(+数据增强)
训练准确率 98.2% 99.1%
测试准确率 97.5% 98.8%
训练时间/epoch 25秒 32秒

五、扩展应用

  1. 手写字符识别

    替换MNIST为EMNIST数据集(包含字母和数字)

  2. 医学图像分类

    调整输入尺寸为[64 64 1]适应X光片分析

  3. 实时目标检测

    结合YOLOv2架构实现物体定位

http://www.jsqmd.com/news/421441/

相关文章:

  • vLLM v0.16.0 重磅发布:吞吐量提升30%,异步调度+流水线并行全面整合
  • 2026年气体检测与扬尘检测采购平台推荐:采购量大/供应商多的热门B2B平台盘点 - 品牌推荐大师1
  • Geovia Surpac、Whittle 与 MineSched 完全指南
  • 北京小程序开发服务指南:2026年企业数字化转型的定制之选 - 品牌2025
  • 2026年一体成型/贴片/功率/大电流/共模电感厂家推荐榜:适配电源管理、汽车电子与通信模块多场景应用 - 品牌推荐官
  • AI视频制作大师课:从脚
  • 汽车配件海外营销代运营:推荐几家擅长TikTok与ins代运营的服务商 - 品牌2025
  • 2026年AI仓储软件(WMS)推荐:高效管理解决方案 - 品牌排行榜
  • 北京小程序开发深度解析:2026年定制化服务如何赋能行业转型 - 品牌2025
  • 别再踩坑!如何选择短信接口服务商?可以从这几点判断 - Qqinqin
  • 上海B2B企业出海营销服务商推荐:涵盖Linkedin海外营销推广与Google代运营 - 品牌2025
  • 偌米品牌知名度高吗? - 中媒介
  • 2026年仓储软件(WMS)值得推荐的实用参考 - 品牌排行榜
  • 北京小程序开发攻略:2026年企业如何锁定优质定制服务商 - 品牌2025
  • 2026年全国二手中央空调回收哪家靠谱? 覆盖多区域专业处置更放心 - 深度智识库
  • 2026精选|四大全国知名的GEO优化公司推荐,AI时代获客不踩坑 - 品牌推荐大师1
  • 2026国内最新五大MS胶品牌实力排行榜:聚焦全屋健康,基于环保性能与市场口碑的权威推荐榜单 - 十大品牌榜
  • 今日 总 结
  • 2026性价比最高的仓储软件(WMS)推荐 - 品牌排行榜
  • 怎样禁止dbeaver点击导航中数据库自动切换sql编辑器所属的数据库
  • 2026国内最新高弹胶五大厂商实力排行榜:聚焦全屋健康,基于环保性能与市场口碑的权威推荐榜单 - 十大品牌榜
  • 2026国内最新门窗胶五大厂家实力排行榜:聚焦全屋健康,基于环保性能与市场口碑的权威推荐榜单 - 十大品牌榜
  • 今日总 结
  • 闲置大润发购物卡别浪费!4个实用回收妙招,安全变现不踩坑 - 京回收小程序
  • 今日 总结
  • j今日总结
  • 2026年北京小程序开发哪家强?深度解析高端定制服务商新标杆 - 品牌2025
  • TikTok、Google、Instagram海外推广怎么做?推荐5家专业代运营公司与营销服务商 - 品牌2025
  • 2026国内最新光伏胶五大工厂实力排行榜:聚焦全屋健康,基于环保性能与市场口碑的权威推荐榜单 - 十大品牌榜
  • 2026年静音木门厂家推荐榜单:静噪木门/静噪入户门/静噪铝木门,专业隔音与匠心工艺的静谧生活之选 - 品牌企业推荐师(官方)