数学建模:MATLAB卷积神经网络

news/2025/3/26 3:19:51/

一、简述

卷积神经网络是一种处理具有网格结构数据的深度学习模型,由输入层、卷积层、池化层、全连接层、输出层组成。

输出层:将图像转换为其对应的由像素值构成的二维矩阵,并存储二维矩阵

卷积层:提取图像的底层特征,在存在特征的区域确定高值,不存在的区域确定低值,计算其与卷积核的乘积值来确定得到特征图(卷积核通过在输入图像的二维矩阵上不停的移动,每一次移动都进行一次乘积的求和,作为此位置的值),整个卷积过程是一个降维过程,通过卷积核的不停移动计算,可以提取图像中最有用的特征,

池化层: 避免过拟合维度过高将得到的特征图再次进行特征提取,将其中最具有代表性的特征提取出来,提取方法常见有最大池化和平均池化,分别取区域中的最大值或者平均值代表最具代表性的特征

全连接层:对提取到的所有特征图进行降维,展开为一维的向量,计算得到最终的识别概率

输出层:根据全连接层的信息得到概率最大的结果

二、代码

clear
clc%% 传入数据
%使用matlab内置的DigitDataset数据集
%定义数据集路径
%用fullfile函数构建一个文件路径,指向MATLAB安装目录下的示例数字数据集
%matlabroot表示根目录,是一个预定义变量
%'toolbox', 'nnet', 'nndemos', 'nndatasets', 'DigitDataset'为路径
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', 'nndatasets', 'DigitDataset');%创建图像数据存储对象
%用imageDatastore函数创建一个图像数据存储对象imds
%digitDatasetPath指定图像所在的文件夹路径
%'IncludeSubfolders', true 表示即在指定的顶层文件夹中查找图像,也递归搜索所有子文件夹中的图像
%'LabelSource', 'foldernames' 指定图像标签的来源
imds = imageDatastore(digitDatasetPath, ...'IncludeSubfolders', true, ... 'LabelSource', 'foldernames');%绘出图像
figure;
%从1到10000中随机20个数
rand = randperm(10000, 20); for i = 1:20 %在4x5的网格布局中选择第i个位置显示图像subplot(4, 5, i); %显示随机选中的第perm(i)个图像文件imshow(imds.Files{rand(i)});
end%% 数据预处理
%初始化训练集的图像数量
num_train = 750; %用splitEachLabel函数将原始数据集分割成训练集和测试集
%第一个传入参数表示分割的数据存储对象
%第二个传入参数表示从每个类别中分配给训练集的样本数量
%randomize表示在分割时随机打乱数据顺序
[train_imds, test_imds] = splitEachLabel(imds, num_train, 'randomize');%% 构建卷积神经网络
%设置输入图像大小为28x28的灰度图,第三个参数表示只有一个颜色通道
inputSize = [28 28 1]; %计算数据集中不同类别的数量
num_class = numel(unique(imds.Labels)); %定义网络架构
layers = [%输入层:指定输入图像的尺寸imageInputLayer(inputSize) %卷积层:3x3滤波器,8个滤波器,'same'表示输出尺寸与输入相同convolution2dLayer(3, 8, 'Padding', 'same') %归一化层batchNormalizationLayer %relu激活层:引入非线性reluLayer %最大池化层:2x2池化窗口,步长为2,减小特征图尺寸maxPooling2dLayer(2, 'Stride', 2) %另一个卷积层convolution2dLayer(3, 16, 'Padding', 'same') batchNormalizationLayer reluLayer %全连接层:输出层的单元数等于类别数fullyConnectedLayer(num_class) %将全连接层的输出转换为概率分布softmaxLayer %计算分类损失classificationLayer 
];% 设置训练选项
options = trainingOptions('sgdm', ... % 使用随机梯度下降作为优化算法'InitialLearnRate', 0.01, ... % 初始学习率'MaxEpochs', 10, ... % 设置最大训练周期数'MiniBatchSize', 128, ... % 每个小批次包含128个样本'ValidationData', test_imds, ... % 验证数据集'ValidationFrequency', 30, ... % 每30次迭代后进行一次验证'Verbose', false, ... 'Plots', 'training-progress'); %用trainNetwork函数训练网络
net = trainNetwork(train_imds, layers, options); 
%% 测试数据
%用classify函数使用训练好的网络对测试数据集进行分类
sim_y = classify(net, test_imds);%测试数据集的实际分类
test_y = test_imds.Labels;%计算分类的准确率
accuracy = sum(sim_y == test_y) / numel(test_y);%% 绘图
figure;
hold on;%绘制实际分类的结果
plot(1:length(test_y), test_y, 'r-', 'DisplayName', '实际分类');%表示正确的预测和错误的分类
correct_y = sim_y == test_y; 
error_y = ~correct_y;%分别绘制正确和错误分类的散点图
%用find函数正确和错误分类的位置
scatter(find(correct_y), sim_y(correct_y), 'g.', 'DisplayName', '正确分类');
scatter(find(error_y), sim_y(error_y), 'rx', 'DisplayName', '错误分类');xlabel('样本数据');
ylabel('分类');
title('测试结果和实际结果');
legend('Location', 'best');
hold off

三、运行结果

 


http://www.ppmy.cn/news/1583119.html

相关文章

智慧医院、养老人员高精度定位解决方案

随着医院就医人数的不断增加,人员管理方面出现了诸多漏洞,表现为患者私自走出病房甚至医院;新生婴儿的有效管理,患者遇到突发病情,得不到及时救助,医疗设备看管措施不够严密,出现丢失等。 品铂科技高精度定…

Windows下rust的安装

前言 Python在编译某些包的时候需要用到rust,一怒之下就打算直接将rust安装上。我采用的平台是Windows。 一、登录rust官网 https://rustup.rs/ 二、安装 下载完毕后,直接运行,呈现如下画面: 回车,继续即可。(打算简…

【AndroidRTC-11】如何理解webrtc的Source、TrackSink

Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题1:如何理解VideoSource、VideoTrack&VideoSink三者的关系…

4(四) Jmeter自动化报表html生成

从JMeter 3.0开始已支持自动生成动态报告,我们可以更容易根据生成的报告来完成我们的性能测试报告。 如何生成html测试报告 如果未生成结果文件(.jtl),可运行如下命令生成报告: jmeter -n -t test.jmx -l result.jtl -e -o /tmp/ResultReport…

解决chrome无法通过公网访问内网(或者127.0.0.1)

Chrome 更新至 94 版本后,为了保护用户免受针对专用网络(也就是内网)上的路由器和其他设备的跨站点请求伪造 (CSRF) 攻击,限制网站向专用网络上服务器发送请求的能力,该限制当前(Chrome94)中可以用配置开关临时解除&am…

工业通讯新趋势:Modbus RTU转TCP的发展前景

一、Modbus RTU 和 Modbus TCP 在多个方面存在差异 物理层与传输介质 Modbus RTU:常使用串口通信,如 RS - 232 或 RS - 485。RS - 232 适合短距离通信,通常在十几米以内;RS - 485 则支持更长距离,可达 1200 米左右&a…

SpringBoot2集成Elasticsearch8(使用spring-boot-starter-data-elasticsearch)

写在前面 使用spring-boot-starter-data-elasticsearch集成Elasticsearch8? What? 官方写的不支持啊?让我们来看下官方给出的版本建议。 官方地址: https://docs.spring.io/spring-data/elasticsearch/reference/elasticsearch/versions.…

跨平台IPC通信、嵌入式WebRTC轻量化引擎:解析EasyRTC在ARM/Linux平台的性能突破

随着智能安防、智慧城市等领域的快速发展,网络摄像机(IPC)作为核心感知设备,其音视频通信能力与跨平台兼容性成为行业关注焦点。EasyRTC嵌入式WebRTC音视频通话SDK通过深度优化WebRTC技术栈,实现了对Linux、ARM、RTOS等…