【一文读懂卷积神经网络(四)】可能是你看过的最全的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 卷积层的前向传播

给定输入4x4的矩阵A,2x2的卷积核W,要使A和W做步长为2的卷积后的输出矩阵Z的大小和A一样,我们需要对A做填充,由 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我们可得需要填充的大小为 p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2}=\frac{2\times (4-1)-4+2}{2}=2 pad=2strides×(nH1)nHprev+f=22×(41)4+2=2,A被填充为8x8的A_paded,示意图如下。
convstridespadforward

1.2 池化层的前向传播

给定输入4x4的矩阵Ain,2x2的池化核,对Ain做步长为2的池化,要使池化前后大小不变,需要对Ain做填充,填充大小与卷积时计算相同, p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2}=\frac{2\times (4-1)-4+2}{2}=2 pad=2strides×(nH1)nHprev+f=22×(41)4+2=2,池化示意图如下。
poolstridespadforward

2. CNN的反向传播(无填充,步长strides不为1)

对于上述前向传播,我们将损失定义为loss,我们的目标是去minimize loss,记loss对某个参数x的偏导数为dx,先来看看池化层的反向传播。

2.1 池化层的反向传播

loss对池化层输入 A 1 A^{1} A1的偏导数为 d A i n 1 dA^{1}_{in} dAin1,池化层的反向传播的数学表达式可写为 d A i n 1 = d A o u t 1 × d A o u t 1 d A i n 1 dA^{1}_{in}=dA^{1}_{out}\times \frac{dA^{1}_{out}}{dA^{1}_{in}} dAin1=dAout1×dAin1dAout1,其中最关键的一步是搞清楚 d A o u t 1 d A i n 1 \frac{dA^{1}_{out}}{dA^{1}_{in}} dAin1dAout1怎么求。我们由之前的介绍可知,池化层分为最大池化和均值池化,我们来分别探讨这两种情况。

2.1.1 最大池化的反向传播

假定给定2x2的池化核,设定步长为2,部分池化核区域内的最大值由彩色方框框出。则对填充后的Ain进行最大池化后的示意图如下。
maxpoolstridespadforward

则我们可知

A 11 = 0 A11=0 A11=0, A 12 = 0 A12=0 A12=0, A 13 = 0 A13=0 A13=0, A 14 = 0 A14=0 A14=0

A 12 = 0 A12=0 A12=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 24 = 0 A24=0 A24=0

A 31 = 0 A31=0 A31=0
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
A 34 = 0 A34=0 A34=0

A 41 = 0 A41=0 A41=0, A 42 = 0 A42=0 A42=0, A 43 = 0 A43=0 A43=0, A 44 =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值