CNN卷积神经网络中的stride、padding、channel以及特征图尺寸的计算

CNN卷积神经网络中的stride、padding、channel以及特征图尺寸的计算


1. stride步幅

stride:卷积时的采样间隔

设置步幅的目的是希望减小输入参数的数目,减少计算量。stride参数的值就是缩小的倍数,比如步幅为2,就对输入的特征图做2倍下采样,注意步幅并不代表输出是输入的 1 s t r i d e \frac{1}{stride} stride1

2. padding填充

padding:在输入特征图的每一边添加一定数目的行列,使得输出和输入的特征图的尺寸相同。

为什么要设置padding:

  1. 如果没有padding,每次进行卷积后,原始图像的尺寸就会越来越小,所以没有办法设计层数足够多的深度神经网络。
  2. 希望每个输入特征图的每一块都能作为卷积窗口的中心,防止丢失图像边缘信息。

在tensorflow中:
padding = 'same'表示进行填充,填充的值由算法内部根据卷积核大小计算,目的是让输出尺寸和输入相等。
padding = 'valid'表示不进行填充,即是 padding=0,只使用有效的窗口位置,这是默认的选项。

p a d d i n g = s i z e _ f i l t e r − 1 2 padding = \frac{size\_filter - 1}{2} padding=2size_filter1

这就是为什么卷积核尺寸通常选择奇数的原因

还要注意padding='same'目的是让输出尺寸和输入尺寸相等,但前提是步幅=1,步幅若不是1,那么输出尺寸跟输入尺寸肯定是不一样

3. channel通道

在只有一个通道的情况下,“卷积核”就相当于“filter”,这两个概念是可以互换的。但在一般情况下,它们是两个完全不同的概念。每个“filter”实际上恰好是“卷积核”的一个集合,在当前层,每个通道都对应一个卷积核,且这个卷积核是独一无二的。

卷积过程中,输入层有多少个通道,filter就有多少个通道。

即:某一层filter的通道数 = 上一层特征图的通道数。

一般的图像都是三通道的,所以卷积核也应该为三个通道。比如对于32x32x3的图像,使用一个5x5x3的卷积核,最终会得到一个28x28x1的特征图。

但是filter的数量任意的,filter的数量决定了卷积后特征图的数量。

即:某一层输出特征图的通道数 = 当前层filter的个数

4. 计算及例子

例:一个尺寸 a*a 的特征图,经过 b*b 的卷积层,步幅(stride)=c,填充(padding)=d,请计算出输出的特征图尺寸?

输出特征图尺寸 = a − b + 2 d c + 1 =\frac{a - b + 2d}{c} + 1 =cab+2d+1

只要记住这个公式,就可以计算所有输出特征图的尺寸了。

例:输入4*4,卷积核3*3,stride = 1,padding = 0
              
              输出尺寸 = (4-3+0)/1 + 1 = 2

在这里插入图片描述

例:输入5*5,卷积核3*3,stride = 1,padding = 1
              
              输出尺寸 = (5-3+2)/1 + 1 = 5

在这里插入图片描述

例:输入5*5,卷积核3*3,stride = 2,padding = 0
              
              输出尺寸 = (5-3+0)/2 + 1 = 2

在这里插入图片描述

例:输入6*6,卷积核3*3,stride = 2,padding = 1
              
              输出尺寸 = int(6-3+2)/2 + 1 = 3
注意:这里的padding有一列是没有参与卷积的,因为stride为2没有办法采样到这一列

在这里插入图片描述

总结:
卷积过程中,有时需要通过padding来避免信息损失,有时也要通过设置stride来压缩一部分信息,或者使输出的尺寸小于输入的尺寸。

本文参考以下文章整理而来:
CNN中stride(步幅)和padding(填充)的详细理解
卷积神经网络中的stride、padding和channel概念
CNN基础知识——卷积(Convolution)、填充(Padding)、步长(Stride)

### 回答1: stride参数决定卷积核在输入数据上滑动的步长。在修改stride参数时,应该考虑以下几点: 1. stride越大,卷积后的特征尺寸会越小。 2. stride越小,卷积后的特征尺寸会越大。 3. stride过大会导致丢失信息,过小会导致计算量增加。 4. 一般来说,使用默认的stride=1即可。如果希望压缩特征尺寸,可以尝试使用stride=2。 ### 回答2: 在卷积神经网络stride参数决定了卷积核在输入数据上的移动步长。合理地选择stride参数可以对卷积神经网络的性能和计算效率产生一定的影响。 首先,当stride参数取较小的值时,例如1,卷积核将以一个像素为单位移动,这样可以更细致地捕捉输入数据的细节信息。然而,这也意味着输出的特征大小将会减小,在深层网络,可能会导致信息丢失的问题。 其次,如果stride参数取较大的值,例如2或更大,卷积核将会以较大的步幅进行移动,这样可以减少计算量,并加速网络的训练和推理过程。然而,这也会导致输出特征尺寸减小更快,并可能损失一些小尺寸特征的信息。 因此,选择合适的stride参数要根据具体情况和需求进行调整。如果需要更多的特征,可以选择较小的stride值;如果需要减少计算量和加速网络运算,可以考虑较大的stride值。此外,还可以采用多尺度的卷积核和stride参数组合,以获取不同层次的特征信息。最终的选择需要结合具体问题的要求和网络结构的设计进行权衡和调整。 ### 回答3: 卷积神经网络stride参数是用来控制滑动窗口在输入数据上的移动步长。通过调整stride参数可以改变输出特征尺寸和维度。在修改stride参数时,我们需要考虑以下几个因素: 1. 特征尺寸:较大的stride值会使滑动窗口跳过部分输入数据,导致输出特征尺寸减小;而较小的stride值会使滑动窗口对输入数据进行更细致的采样,输出特征尺寸会相应增大。 2. 计算效率:较小的stride值会导致更多的计算量,使得模型运算时间增加;而较大的stride值会减少计算量,但可能会丢失细节信息。 3. 特征提取能力:较小的stride值可以捕捉更详细的特征信息,适用于复杂的任务;而较大的stride值可能会丢失一些重要的细节信息,适用于简单的任务。 一般来说,当输入数据的尺寸较大时,较大的stride值可以加快计算速度,并降低模型复杂度。但如果输入数据尺寸较小,或者需要更精确的特征提取,则应该选择较小的stride值。 在实际应用,通常会通过交叉验证和实验调整stride参数,以获得最佳的性能和效果。不同的任务和数据集可能需要不同的stride设置,需要根据实际情况进行调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值