卷积网络的运算过程、特征图大小计算与参数计算过程

卷积网络的运算过程以及参数计算过程

写这篇文章是因为发现自己这么久以来把卷积核的计算过程理解错了,一直到和师兄交流的时候才发现,抓紧写一篇博客记录一下。

1. 卷积神经网络的计算过程

在这里插入图片描述
以上图为例,假设输入的图片是32 × \times × 32 × \times × 3大小,也就是我们所说的输入为32 × \times × 32大小的RGB图像。我一直理解错的就是这幅图像与卷积核计算的过程,具体怎么错的就不误解大家了。
假设现在我们要用一个5 × \times × 5 × \times × 3的卷积核来提取图片中的特征,首先需要注意的一点,我们一般在描述时通常就将这个卷积核称为5 × \times × 5的卷积核,而忽略掉后面这个3,而卷积核的这个宽度必须与输入的图像的宽度一致,也就是说都是3,当它们的宽度一致时卷积核才可以像我们说的在图像上面滑动。
这时大家可能会有疑问,如果宽度是3,那提取的特征不就一直是3个吗?

如果你有这个问题说明你还是没有理解其计算过程,实际上我们说的5 × \times × 5 × \times × 3就是一个卷积核,如果需要提取输入图像的10个特征,那么我们就需要10个这样的卷积核,在论文中通常会把这个卷积部分的大小描述为5 × \times × 5 × \times × 10,会省略这个3的书写。这也就是大家理解容易出错的地方。
在这里插入图片描述
在这张图片中我们可以看到这个5 × \times × 5 × \times × 3的卷积核提取特征的过程,也就是这个卷积块核图像中一个一样大小的块相乘(dot也就是点乘)再加上偏置项,再使用一个激活函数得到最终的特征提取结果。其运算过程也可以结合下图理解:
一个RGB图像大小为 6 × 6 6\times 6 6×6,三个通道,中间这一个部分表示是用了两个卷积核,每个卷积核的大小也是 3 × 3 3\times 3 3×3,与输入图像通道数一致,因此卷积核的通道数也是3个。每个卷积核在图像上滑动以后得到的特征图的大小是 4 × 4 4\times 4 4×4,两个卷积核得到的特征图就是 4 × 4 × 2 4\times 4 \times 2 4×4×2
在这里插入图片描述
在这里插入图片描述

2. 卷积网络得到特征图的大小计算

从上图我们可以看到卷积核在图像上滑动后得到了一个特征图,因为我们使用了一个卷积核,可以看到得到特征图宽度为1。
那么怎么计算出特征图的大小为28 × \times × 28呢?
这就要用到我们的一代计算公式:
H h e i g h t = ⌊ I n p u t h e i g h t − F i l t e r h e i g h t + 1 ⌋ H_{height} = \lfloor Input_{height} - Filter_{height} + 1 \rfloor Hheight=InputheightFilterheight+1
W w i d t h = ⌊ I n p u t w i d t h − F i l t e r w i d t h + 1 ⌋ W_{width} = \lfloor Input_{width} - Filter_{width} + 1 \rfloor Wwidth=InputwidthFilterwidth+1

现在我们可能会发现另一个问题,我们现在所说的卷积核在输入图像上都是一步一步滑动,如下图所示:(图话的比较丑,大家明白意思就行,哈哈)
在这里插入图片描述
有的时候我们需要控制输出的特征图的大小,这时候我们就会选择控制一下卷积核在输入图像上的步长,stride。考虑stride后我们就要用到一个新的计算公式了:
H h e i g h t = ⌊ I n p u t h e i g h t − F i l t e r h e i g h t s t r i d e + 1 ⌋ H_{height} = \lfloor{ Input_{height} - Filter_{height} \over stride} + 1\rfloor Hheight=strideInputheightFilterheight+1
W w i d t h = ⌊ I n p u t w i d t h − F i l t e r w i d t h s t r i d e + 1 ⌋ W_{width} = \lfloor{ Input_{width} - Filter_{width} \over stride}+1\rfloor Wwidth=strideInputwidthFilterwidth+1
下面我们看一个stride=2时的实例:
在这里插入图片描述
从上图可以看出步长为2可以将原始输入的图像大小减少为原来的一半,stride具有避免重复计算的功能

上面的两个例子讲得都是卷积核能够正好在输入图像上滑动到最右边的,但是在实践中我们可能会遇到卷积核不能正好在输入图像上滑动的,也就是公式不能被整除,这时我们需要用到向下取整,也就是公式中的两个不完整的大括号。

接下来我们会思考使用卷积核提取特征如果遇到我们上述所说的不能整除的情况,那么很可能会舍弃掉一些像素信息,为了解决这个问题我们在提取的时候可以加入padding。
现在到了最后版本的计算公式:

H h e i g h t = ⌊ I n p u t h e i g h t − F i l t e r h e i g h t + 2 × p a d d i n g s t r i d e + 1 ⌋ H_{height} = \lfloor{ Input_{height} - Filter_{height} + 2\times padding\over stride}+ 1\rfloor Hheight=strideInputheightFilterheight+2×padding+1
W w i d t h = ⌊ I n p u t w i d t h − F i l t e r w i d t h + 2 × p a d d i n g s t r i d e + 1 ⌋ W_{width} = \lfloor{ Input_{width} - Filter_{width}+2\times padding \over stride}+ 1\rfloor Wwidth=strideInputwidthFilterwidth+2×padding+1
例子如下图所示:
在这里插入图片描述
接下来我们又会有一个新的疑问,如何选择padding的大小呢?
一般,当stride=1,我们需要满足输入的特征图大小与输出相同时, p = ( f − 1 ) / 2 p=(f-1)/2 p=(f1)/2。这个与上图的例子无关,大家可以自己画一个图理解。
在编程的时候我们有两种方法选择,1个是same,一个是valid。
这一部分知识再我的另一篇博客里有讲解,大家可以去看:点这里

3. 卷积神经网络的计算–参数大小

其实参数计算比较简单,我们只要记住一个公式就可以:
某 层 参 数 个 数 = 卷 积 核 的 大 小 × 输 入 图 像 的 通 道 数 × 卷 积 核 的 个 数 + 卷 积 核 个 数 某层参数个数 = 卷积核的大小\times 输入图像的通道数\times 卷积核的个数 + 卷积核个数 =××+
其中最后加的这个卷积个数实际上就是偏置单元的个数。

举个例子:一个输入大小为 256 × 256 × 3 256 \times 256\times 3 256×256×3的图像,第一层的卷积核大小为 5 × 5 5 \times 5 5×5,卷积核的个数为10。
那么第一层参数的个数为:
5 × 5 × 3 × 10 + 10 = 760 5\times 5\times 3\times 10 + 10 = 760 5×5×3×10+10=760

以上就是我所总结的所有与卷积计算有关的知识啦,欢迎评论区补充!

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
一维卷积神经网络(1D CNN)是一种用于处理序列数据的深度学习模型。它可以有效地捕捉序列中的局部模式和特征,并在许多自然语言处理(NLP)和音频处理任务中取得良好的效果。 1D CNN的运算过程如下: 1. 输入数据:首先,我们需要将输入的序列数据表示为一个矩阵,其中每一行代表一个时间步的特征向量。假设我们有一个长度为N的序列,每个时间步的特征向量维度为D,那么输入矩阵的形状为(N, D)。 2. 卷积层:接下来,我们使用一个或多个卷积层来提取序列中的局部模式。每个卷积层由多个卷积核组成,每个卷积核都有自己的权重参数卷积核在输入序列上进行滑动操作,计算出一系列的特征映射。 在一维卷积操作中,卷积核是一维的,它沿着序列的时间维度进行滑动。每次滑动,卷积核与输入序列的一部分进行逐元素相乘,并将结果相加得到一个标量值。这个标量值就是卷积操作的输出。 卷积操作可以通过使用不同大小卷积核来捕捉不同尺寸的局部模式。较小的卷积核可以捕捉更细粒度的特征,而较大的卷积核可以捕捉更宽范围的特征。 3. 激活函数:在卷积操作之后,通常会应用一个非线性激活函数,如ReLU(Rectified Linear Unit),来引入非线性变换。激活函数可以增加网络的表达能力,并帮助网络学习更复杂的模式。 4. 池化层:为了减少参数数量和计算量,并提取更显著的特征,通常会在卷积层之后添加池化层。池化层通过对特征映射进行下采样,将每个特征映射划分为不重叠的区域,并从每个区域中选择一个代表性的值作为输出。常用的池化操作包括最大池化和平均池化。 5. 全连接层:最后,我们可以将池化层的输出连接到一个或多个全连接层,以进行分类、回归或其他任务。全连接层将池化层输出的特征映射转换为最终的预测结果。 以上就是一维卷积神经网络运算过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值