深度学习——Pooling Layer
简介
Pooling Layer正常是用于Convolution Layer 后面,可以进一步提取有效特征,降低n W , n H n_W,n_H n W , n H 维度,减少计算量。Pooling 层和Convolution层一样具有s t r i d e ( d ) 、 f 、 p a d ( p ) stride(d)、f、pad(p) s t r i d e ( d ) 、 f 、 p a d ( p ) 参数。
Pooling Layer主要有两种:1)Max Pooling、2)Average Pooling,如下图(1)
n H l = ⌊ n H l − 1 + 2 ∗ p − f s + 1 ⌋ , n W l = ⌊ n W l − 1 + 2 ∗ p − f s + 1 ⌋ , n C l = n C l − 1 ( 1 ) n_H^l=\lfloor \frac{n_H^{l-1}+2*p-f}{s}+1\rfloor,n_W^l=\lfloor \frac{n_W^{l-1}+2*p-f}{s}+1\rfloor,n_C^{l}=n_C^{l-1} \qquad(1) n H l = ⌊ s n H l − 1 + 2 ∗ p − f + 1 ⌋ , n W l = ⌊ s n W l − 1 + 2 ∗ p − f + 1 ⌋ , n C l = n C l − 1 ( 1 ) f i g u r e ( 1 ) figure(1) f i g u r e ( 1 )
1、Max Pooling
forwardpropagation
Max Pooling 如上图(1)所示,对输入数据每一通道在f*f 的slice范围内的数取最大值形成新的矩阵,最后每一通的矩阵concat在一起,维度变为公式(1)。f = 2 , s t r i d e = 2 f =2,stride =2 f = 2 , s t r i d e = 2 。a ( n h , n w , c ) l = m a x ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) ( 2 ) a_{(nh,nw,c)}^l=max(a^{l-1}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)})\qquad(2) a ( n h , n w , c ) l = m a x ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) ( 2 )
backpropagation
由前向传播可以知道,梯度只要最大值才有,只有最大值才需更新。m a s k = ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 = = m a x ) / / 等 于 最 大 值 的 位 置 变 为 1 , 其 他 为 0 ( 3 ) mask = (a^{l-1}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)}==max)//等于最大值的位置变为1,其他为0 \qquad(3) m a s k = ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 = = m a x ) / / 等 于 最 大 值 的 位 置 变 为 1 , 其 他 为 0 ( 3 ) d A ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 + = m a s k ∗ d A ( n w , n h , n c ) l ( 4 ) dA^{l-1}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)} +=mask*dA^l_{(nw,nh,nc)}(4) d A ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 + = m a s k ∗ d A ( n w , n h , n c ) l ( 4 )
2、Average Pooling
forwardpropagation
Average Pooling 如上图(1)所示,对输入数据每一通道在f*f 的slice范围内的数计算平均值形成新的矩阵,最后每一通的矩阵concat在一起,维度变为公式(1)。f = 2 , s t r i d e = 2 f =2,stride =2 f = 2 , s t r i d e = 2 。a ( n h , n w , c ) l = n p . s u m ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) f ∗ f ( 5 ) a_{(nh,nw,c)}^l=\frac{np.sum(a^{l-1}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)})}{f*f}\qquad(5) a ( n h , n w , c ) l = f ∗ f n p . s u m ( a ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) ( 5 )
backpropagation
由前向传播可以知道,梯度只要最大值才有,只有最大值才需更新。d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l = n p . s u m ( d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) f ∗ f dAverage^{l}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)}=\frac{np.sum(dAverage^{l-1}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)})}{f*f} d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l = f ∗ f n p . s u m ( d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 ) d A ( ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 + = d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l ( 4 ) dA^{l-1}_{((nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)} += dAverage^{l}_{(nh*stride:nh*stride+f,nw*stride:nw*stride+f,c)} (4) d A ( ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l − 1 + = d A v e r a g e ( n h ∗ s t r i d e : n h ∗ s t r i d e + f , n w ∗ s t r i d e : n w ∗ s t r i d e + f , c ) l ( 4 )
相关文章: