卷积神经网络(CNN)基础知识整理

卷积神经网络(CNN)基础知识整理

0写在前面

这两天陆续看了一些关于卷积神经网络的视频和博文,把我觉得比较有用的知识和内容梳理一下,理顺逻辑,自己也可加深理解,写在这里,日后想看,随手就能翻来,永不会丢失。

1卷积神经网络

既然叫卷积神经网络,这里面首先是卷积 ,然后是神经网****络 ,是2者的一个结合,卷积这个概念实际上来自于信号处理领域,一般是对2个信号进行卷积运算,见下图:

神经网络,这是机器学习的元老,是对人脑神经元工作机制的模拟,每个神经元是一个计算单元,输入的数据与权重进行相乘、求和,再加上偏置,得到的数据再经过激活函数,将结果进行输出,见下图,多个神经元相互连接组成神经网络,具体就不展开说了。

卷积神经网络在图像分类和识别领域的应用非常多,最早用于手写数字的分类识别,后来逐渐发展起来。

2图片格式

那就从手写体图像识别说起吧,一副图片如果是单色的,那么可以看成是一个二维的数字矩阵,每个像素点的颜色都可以用灰度值来表示;那如果图像是彩色的,可以将图像看成是RGB三个单色图片叠加的组合。

每一张图片的每一个像素点,其实都是一个数值,整体可看成一个三维矩阵。

3图片卷积运算

那么对一个彩色图像做卷积,到底做了什么呢?下面这张动图,很好地展示了图像卷积计算的过程,原始图像有RGB三个通道channel1-3,对应有3个卷积核 Kernel1-3,每一个通道的图片与对应的卷积核做乘加运算,每个通道得到的数值再相加,加上总体的偏置Bias得到特征图(feature map)里面的一个值。

下面这个图是一个立体的展示。

4 kernel与feature map

这里面第一个问题,就是卷积核为什么是3*3大小的,实际上这个尺寸也是经过学者们不断研究总结出来的,目前认为3*3的感受野足够用,而且运算量也会相对低,还有1*1的卷积核在使用,其它的基本不用了。

第二个问题,卷积核里面的参数是怎么来的,其实这里面的参数机器学习要实现的,当我们把所有的核参数都调整好,那这个模型也就确定了。也有一些先验的卷积核,如下面的核,进行卷积之后,可以实现锐化和边缘提取的效果。

那我们对一幅图片进行卷积之后,就会形成一个Feature map,它会提取一些特征,用不同的核进行卷积就会输出多个Feature map,

卷积核/Kernels,(convolution kernel)也叫过滤器、滤波器。

特征图/Feature map,当图像像素值经过过滤器后得到的就是特征图。

下面2张图就很直观地展示了kernel和feature map的实际样子。

卷积神经网络处理过程中,随着模型运算的深入,图像的尺寸(h*w)会越来越小,但是提取的特征会越来越多。

5 padding/边缘填充

这里面由于边界的问题,每一次卷积之后,图像不可避免地会被压缩一点,这就涉及到一个概念padding ,如果设置padding的值为"same ",则会在原图像周围补充1圈像素点,一般补0,这样后面的图像尺寸都会与原图像相同。默认参数是"valid ",翻译过来是有效 的意思,这里的有效指的是与卷积核做运算的图片像素都是有效的,实际上就是没有外圈的补0。

unvalid

valid

下图展示的就是带padding的卷积效果,这个图的问题是用的是4*4的卷积核,实际中没有用4*4卷积核的。

用3*3的卷积核,可保持图像卷积后尺寸不变。

图片引自:https://github.com/vdumoulin/conv_arithmetic

6 Stride/步长

上图是步长为1的情况,如果步长为 2,就是相当每隔两行或者两列进行卷积,实际上起到了降维的作用,就是卷积后的feature map尺寸会变小。

图片引自:https://github.com/vdumoulin/conv_arithmetic

7 pooling/池化

池化主要作用是把数据降维,也叫下采样,可以有效的避免过拟合。主要有两种池化方式,Max pooling/ avg pooling,通常情况下,池化区域是2*2大小,池化之后,4*4的图片,会变成2*2大小。

8 shape

在tensorflow和pytorch中,shape的结构有所区别

tensorflow输入shape为(batch_size, height, weight, in_channels)/(样本数、图像高度、图像宽度, 图像通道数)

pytorch输入shape为(batch_size, in_channels, height, weight)

上图中,

输入图片的shape: inChannels, height,weight /3,8,8;

卷积核的shape: outChannels, inChannels, height,weight/5,3,3,3;

输出图片的shape: outChannels, outHeight, outweight /5,6,6;

卷积核的输入通道数(in depth)由输入矩阵的通道数(inChannels)所决定。比如:一个RGB格式的图片,其输入通道数为3。

输出矩阵的通道数(out depth)由卷积核的输出通道数所决定,比如下面这个动画当中,卷积核有8个,那么输出outChannels则为8。

图片 引自:https://animatedai.github.io/

9 epoch、batch、Batch Size、step

epoch:表示将训练数据集中的所有样本都过一遍(且仅过一遍)的训练过程。在一个epoch中,训练算法会按照设定的顺序将所有样本输入模型进行前向传播、计算损失、反向传播和参数更新。一个epoch通常包含多个step。

**batch:**一般翻译为"批次",表示一次性输入模型的一组样本。在神经网络的训练过程中,训练数据往往是很多的,比如几万条甚至几十万条------如果我们一次性将这上万条的数据全部放入模型,对计算机性能、神经网络模型学习能力等的要求太高了;那么就可以将训练数据划分为多个batch,并随后分批将每个batch的样本一起输入到模型中进行前向传播、损失计算、反向传播和参数更新。但要注意,一般batch这个词用的不多,多数情况大家都是只关注batch size的。

Batch Size(批大小): 表示在单次训练中传递给模型的图像数量,我们在神经网络训练过程中,往往需要将训练数据划分为多个batch;而具体每一个batch有多少个样本,那么就是batch size指定的了。

**step:**一般翻译为"步骤",表示在一个epoch中模型进行一次参数更新的操作。通俗地说,在神经网络训练过程中,每次完成对一个batch数据的训练,就是完成了一个step。

10 神经网络

实际上,上面的卷积处理过程,都是在对图片进行特征提取,而最终要进行分类或预测就需要借助神经网络了,所以一般在卷积处理之后需要对数据进行压平(flatten)操作,使其变为1维的数据,便于送入神经网络的输入层。

神经网络模型里面(见下图),全连接层/Dense层是深度学习中常用的一种神经网络层,也称为密集连接层或多层感知机层。它既能当输入层(input layer),又能当输出层(output layer),还能当中间层(Hidden layer)。

推荐一个绘制神经网络图的工具:NN-SVG。

11 激活函数

在神经网络中,激活函数用于引入非线性,使网络能够学习复杂的映射关系。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

相关推荐
156082072191 分钟前
使用JFMRFVU3P多通道同步相位测试
网络·人工智能
凡达Ai派10 分钟前
AI画布交付文件总是混在一起?用源文件、预览图和发布图三层目录分开管理
图像处理·深度学习·神经网络·自然语言处理·知识图谱
归秋14212 分钟前
2026企业AI办公工具选型指南:从场景匹配到平台评估
大数据·运维·人工智能
2601_9689007725 分钟前
Agent沙盒基础设施拆解:三层镜像与按需加载的工程取舍
人工智能
楚楚25133 分钟前
2026实测:智能体办公平台三周上手真实体验
人工智能
智圣新创0142 分钟前
教育数据要素流通刚需下 智圣新创高校数据中台解决方案的全域建设落地框架
大数据·人工智能·物联网
xianghongtao01161 小时前
如何选择一台适合你的本地 AI 硬件设备?Lucy AI Studio——从本地 AI 办公到家庭影音的完整指南
人工智能·端脑科技·本地ai硬件设备·kickstarter众筹项目·lucy ai studio·lucy aios
ZhangJun951 小时前
Mobike 共享单车分析项目
人工智能·python·算法·kmeans·聚类·knn
互联网资讯1 小时前
本地创业者入局 AI 短剧,本地化部署怎么选更省钱
大数据·人工智能
唐维康1 小时前
昆工计算机408考研2027招285人,比去年少6人
人工智能·考研·昆明理工大学