深度学习基础篇——卷积

卷积输出尺寸计算(长*宽):

Tensorflow卷积中Padding有两种方式,一种是same,另一种是valid.
当步长为1的时候,选择same方式,输出和输入size一样,但当步长不唯一时候,输出和输入size则不一样,在csdn上看了不少其他案例,也没有找到步长不为1时候padding具体是如何操作的。

在这篇博客里(Tensorflow卷积中Padding的两种方式)根据源码找到了具体的卷积size计算公式,具体如何padding也没有解释清楚,当然,其他博客也没有解释的很清楚。(案例1在kernel尺寸和input一样的情况下,same模式为什么padding呢?如果是为了保持输入和输出size一致,那为什么案例2不padding至输入和输出size一致呢?)

两种Padding:

  • VALID:若不够滑动,则将右下的剩余部分全部舍弃,从原矩阵左上角开始卷积。
    O = ⌈ I − k + 1 s ⌉ O=\lceil \frac{I-k+1}{s} \rceilO=sIk+1

  • SAME:
    O = ⌈ I s ⌉ O=\lceil \frac{I}{s} \rceilO=sI

O:输出大小
p:padding
k:kernel size
s:stride

卷积核是如何让channel变化的

之前没有理解卷积核是如何让channel数量改变的,网上搜索大多数都是直接给结论——输出的channel数量和卷积核数量一样。但不理解为什么是这样。

在这里插入图片描述
直到看到这篇教程【CNN】理解卷积神经网络中的通道 channel,才明白了!原来是channel对应相乘后要再相加!所以每个卷积核只能输出1个channel!

如下图,假设现有一个为 6×6×3 的图片样本,使用 3×3×3 的卷积核(filter)进行卷积操作。此时输入图片的 channels 为 3,卷积核中的 in_channels与需要进行卷积操作的数据的 channels 一致(这里就是图片样本,为3)
在这里插入图片描述
接下来,进行卷积操作,卷积核的channel与input对应的channel做卷积操作,输出的大小为4*4, (注: (6+0-3)/1 + 1= 4)
三个channel的输出都是4 * 4,然后进行求和,得到第一个结果。上面步骤完成后,由于只有一个卷积核,所以最终得到的结果为 4×4×1 , out_channels 为 1。
在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4×4×2 的结果。


版权声明:本文为a806689294原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。