Matlab深度学习(一)——如何构建一个卷积神经网络

devtools/2024/11/18 8:57:47/

1.1 CNN的核心 —— 卷积

        我们以二维滑动卷积着重说明。与我们的滑动窗异常值检测类似,但滑动卷积涉及三个矩阵:第一个矩阵通常尺寸大且固定不动,在这称之为“输入矩阵”;第二个矩阵尺寸小,在输入矩阵上以从左到右,从上到下进行滑动,在这称之为“卷积核”;卷积核移动的过程中,计算的方式是 将两个小矩阵的相应元素相乘并求和,结果按照移动顺序作为第三个矩阵元素,在这称为“特征矩阵”。

        卷积运算的过程中,每次都需要进行滑动,滑动的长度称为步长。我们可以发现,特征矩阵元素个数少于输入矩阵的元素个数。我们在输入矩阵的边缘添加0元素,也就是扩展一圈,就可以让得到的维度相同。卷积核的移动始终在输入矩阵内部。

        卷积核与图像的相似程度越高,得到的响应值越大,因此可以通过滑动卷积运算来提取图像的特征。

1.2 卷积神经网络

        卷积神经网络是包含卷积计算且具有深度结构的前馈神经网络,典型神经网络可以分为特征提取(卷积层、激活函数、池化层)和全连接层。 AlexNet包含5个卷积层和3个全连接层。

        第一层是图像输入层,通过卷积以及其他特定形式的运算从图像中提取特征,接下来每一层都以前一层提取出的特征作为输入进行卷积,得到更高级的特征。经过多层的变换后,就可以把原始图像转换为高层次的抽象特征。

1.3 卷积层的原理

        卷积层通过卷积核对输入信息进行卷积运算从而提取特征。

        一个卷积神经网络通常包含多个卷积层,以AlexNet为例子,就有5个卷积层,在卷积神经网络的数字图像识别过程中,每层的特征将会更加抽象。同一个卷积层中可以有多个不同的卷积核,所得到的特征图的个数和卷积层的卷积个数有关(子卷积核是分别卷积后求和,当然也可以是别的计算方法)。卷积神经网络工作的过程中,无论是输入还是中间的特征图,通常不是一个简单的二维图,我们称每一个二维图为一个通道。比如彩色RGB图像,就i是三通道组成的.对于多通道输入,每个通道采用不同的卷积核卷积,然后将对于特征矩阵的元素进行累加即可。

        卷积神经网络中的元素是通过训练确定的,称之为参数。在这里,参数的都是 参数共享的。对于同一幅输入图像或者特征图,在卷积的过程中,每个位置都是用同一个卷积核取进行运算的。卷积层使用参数共享,可以减少训练的参数,降低网络的复杂程度,提高训练效率,避免了过多连接导致的过拟合现象。

1.4 非线性激活函数

        卷积运算是一种线性运算,若干个线性运算的叠加可以用一个线性运算表示,那这样的话,进行那么多卷积运算,不就等于只进行了一个大的?因此在每个卷积后面加一个非线性激活函数,那么每个卷积层的效果都可以得到保留。

        非线性激活函数有很多种,ReLU就是其中之一,表达式位 f(x)=max(0,x),对于输入小于0的数,会让其为0,大于0的不变

1.5 池化层

        Pooling池化操作,实质就是对统计信息提取的过程。在卷积神经网络中,池化就是对特征图上面的一个给定区域让他求出一个能代表这个区域的点,常见的就是最大池化和平均池化

        池化可以减少特征图的尺寸,也能保留这个区域种的一些特性。

1.6 全连接层

        相当与一个分类器或预测器的作用

1.7 使用MATLAB构建一个卷积神经网路

        我们的目标是构建一个卷积神经网络,实现对输入的0~9数字的二值图像进行分类

1.7.1 加载图像样本数据

        加载MATLAB下载时自带的手写图片数据

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', 'nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, 'IncludeSubfolders',true,'LabelSource','foldernames');
figure;
perm = randperm(10000,20);
for i = 1:20subplot(4,5,i);imshow(imds.Files{perm(i)});
end

得到结果如下

        以上为从数据库中随机调出20张图片给你看,每次运行也会有不同的结果,imds就是我们存放的数据库。

1.7.2 将数据分为训练集(7500),剩下为测试集

%% 步骤2:将加载的图像样本分为训练集和测试集(在本例中,训练集的数量为750幅,剩余的为测试集)
numTrainFiles = 7500;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');

1.7.3 利用工具箱构建神经网络

        将其导入到工作区,我们就设计好了一个卷积神经网络,并在数据内把前面所导入好的数据集选上,然后配置训练选项并开始训练。

训练结果如下:

1.7.4 训练效果验证

        我们可以随机取一张照片放到网络里面,查看其识别的效果。当然,训练完成后,需要把训练好的网络导出到工作区里

-----

        以上内容为MATLAB工具箱的初次使用与卷积神经网络的概念说明


http://www.ppmy.cn/devtools/134919.html

相关文章

antdesign对话框输出html格式

antdesign对话框this. i n f o 、 t h i s . info、this. info、this.success、 this. e r r o r 、 t h i s . error、this. error、this.warning、this.KaTeX parse error: Expected }, got EOF at end of input: … this.message.success(‘文件上传成功’) this.handleReLo…

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

flutter字体大小切换案例 小字体&#xff0c;标准字体&#xff0c;大字体&#xff0c;超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes&#xff08;通过 volumeClaimTemplates&#xff09;以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中&#xff0c;如果你想要一个任务拉取 Git 仓库中的文件&#xff0c;另一个任…

OpenCV自学系列(2)——核心操作(core operations)

OpenCV官网指导教程第二期&#xff0c;对应官网的 core operation。 主要包括三大类&#xff1a; 1、图像基本操作 2、图像的算术操作 3、&#xff08;代码&#xff09;表现的测量和提高 主要使用到的方法如下&#xff1a; cv2.cvtColor() cv2.split() cv2.merge() cv2.copy…

用paramiko与SSH交互

# 导入paramiko库用于SSH连接&#xff0c;以及sys库用于处理命令行参数 import paramiko import sys# 定义一个函数send_command&#xff0c;用于发送命令到SSH服务器并打印输出结果 def send_command(ssh_client, cmd):# 使用exec_command方法执行命令&#xff0c;并获取输入、…

前馈神经网络 (Feedforward Neural Network, FNN)

代码功能 网络定义&#xff1a; 使用 torch.nn 构建了一个简单的前馈神经网络。 隐藏层使用 ReLU 激活函数&#xff0c;输出层使用 Sigmoid 函数&#xff08;适用于二分类问题&#xff09;。 数据生成&#xff1a; 使用经典的 XOR 问题作为数据集。 数据点为二维输入&#xff…

苍穹外卖学习-day11

1. Apac 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;Apache ECharts 常见的统计图形有&#xff1a;柱状图&#xff0c;条形…

创建vue3项目步骤

脚手架创建项目&#xff1a; pnpm create vue Cd 项目名称安装依赖&#xff1a;Pnpm iPnpm Lint&#xff1a;修复所有文件风格 &#xff0c;不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库&#xff1a;提交前做代码检查 pnpm dlx husky-in…