【一文读懂卷积神经网络(二)】可能是你看过的最全的CNN(步长为1,有填充)

本文深入介绍卷积神经网络(CNN)在步长为1且有填充情况下的前向传播与反向传播过程,包括有填充的卷积层和池化层。详细阐述了填充的作用,以及如何通过填充保持输出尺寸,同时还提供了反向传播中最大池化和均值池化的计算方法。最后,给出了完整的Python实现代码。
摘要由CSDN通过智能技术生成

本系列将由浅入深的介绍卷积神经网络的前向传播与后向传播,池化层的前向传播与后向传播,并分别介绍在不同步长与不同填充的情况下卷积层和池化层的前向传播与后向传播又有哪些不同。最后给出完整的Python实现代码。

完整目录如下:

一、CNN ⇒ \Rightarrow 步长为1,无填充的卷积神经网络

二、CNN ⇒ \Rightarrow 步长为1,填充的卷积神经网络

三、CNN ⇒ \Rightarrow 步长为1,无填充的卷积神经网络

四、CNN ⇒ \Rightarrow 步长为1,填充的卷积神经网络

上一篇文章已经介绍了无填充,步长为1的卷积神经网络,本文将继续由浅入深的介绍有填充,步长为1的卷积神经网络的前向传播与后向传播,有填充的池化层的前向传播与后向传播。

1.CNN的前向传播(有填充,步长strides=1)

1.1 何为填充

在上一节无填充,步长为1的卷积神经网络中我们介绍了卷积和池化的原理,这里不再赘述,让我们看看什么是填充。首先回顾一下上一节介绍的卷积层的正向传播。
convforward
可以看到输入5x5的矩阵A,输出的是3x3的矩阵Z,因为步长为1,且没有填充,所以导致Z的大小比A小,有些时候我们并不想让输出的维度减小或者是减小太多(比如深层次神经网络里,如果一直减小下去到最后维度会非常非常小),那怎么办呢,这时候我们就可以使用填充(padding)。
填充,顾名思义,就是在输入矩阵A的外面填充1层或多层,这个由自己决定。卷积后的维度由 n H = ⌊ n H p r e v − f + 2 × p a d s t r i d e s ⌋ + 1 n_{H}=\lfloor{\frac{n_{Hprev}-f+2\times pad}{strides}}\rfloor+1 nH=stridesnHprevf+2×pad+1计算,其中 n H p r e v n_{Hprev} nHprev为卷积前输入图像的高度,f为卷积核的大小,strides为卷积的步长,pad为填充值, n H n_{H} nH为卷积后输出图像的高度,要使卷积前后输入输出大小不变,我们需要设定填充值为 p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2} pad=2strides×(nH1)nHprev+f.
接下来我们看看有填充的卷积层和池化层的正向传播。

1.2 有填充的卷积层

对于输入3x3的矩阵A,给定3x3的卷积核,要想使输出的矩阵Z的大小和A相同,我们对A做填充,填充的大小为 p a d = 1 × ( 3 − 1 ) − 3 + 3 2 = 1 pad=\frac{1\times(3-1)-3+3}{2}=1 pad=21×(31)3+3=1,所以我们对A上下左右分别作1行(列)的填充。卷积示意图如下(本文中默认卷积步长都为1)。

convpadforward

1.3 有填充的池化层

对于输入4x4的矩阵 A i n A_{in} Ain,给定2x2的池化核,步长为2,要想使输出矩阵 A o u t A_{out} Aout的大小和 A i n A_{in} Ain相同,我们需要对 A i n A_{in} Ain做填充,填充的大小为 p a d = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{2\times(4-1)-4+2}{2}=2 pad=22×(41)4+2=2,所以我们需要对 A i n A_{in} Ain上下左右分别做两行(列)填充。池化示意图如下。

poolpadforward

2.CNN的反向传播(有填充,步长strides=1)

2.1 池化层的反向传播

对于池化层的反向传播,我们依然是分为最大池化和均值池化两种情况来分别讲述。首先看看最大池化的反向传播。

2.1.1 最大池化的反向传播

对于有填充,步长为2的最大池化,我们假设下图彩色方框框出的值为一个池化区域内最大的值。
maxpoolpadforward

我们可得
A11 = 0 , A12 = 0 , A13 = 0 , A14 = 0
A21 = 0
A 22 = 0 × a 11 + 1 × a 12 + 0 × a 21 + 0 × a 22 A22=0\times a11+1\times a12+0\times a21+0\times a22 A22=0×a11+1×a12+0×a21+0×a22
A 23 = 0 × a 13 + 0 × a 14 + 0 × a 23 + 1 × a 24 A23=0\times a13+0\times a14+0\times a23+1\times a24 A23=0×a13+0×a14+0×a23+1×a24
A 32 = 0 × a 31 + 0 × a 32 + 0 × a 41 + 1 × a 42 A32=0\times a31+0\times a32+0\times a41+1\times a42 A32=0×a31+0×a32+0×a41+1×a42
A 33 = 1 × a 33 + 0 × a 34 + 0 × a 43 + 0 × a 44 A33=1\times a33+0\times a34+0\times a43+0\times a44 A33=1×a33+0×a34+0×a43+0×a44
A34 = 0
A41 = 0 , A42 = 0 , A43 = 0 , A44 = 0

有填充的最大池化反向传播见下图。
maxpoolpadback

d A i n 1 = d e l e t e

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值