卷积神经网络

一、卷积层

1.1 二维卷积 (如灰度图像)

滤波器 Filter

1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 n × n 图 像 ∗ 1 0 − 1 1 0 − 1 1 0 − 1 f × f 滤 波 器 = 3 3 − 3 3 3 − 3 3 3 − 3 ( n − f + 1 ) × ( n − f + 1 ) 输 出 图 像 \begin{array}{|c|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \color{red}1 & \color{red}1 & \color{red}0 & \color{red}0 & \color{red}1 \\ \hline \color{red}1 & \color{red}1 & \color{red}0 & \color{red}0 & \color{red}1 \\ \hline \end{array} ^{图像}_{n \times n} * \quad \begin{array}{|c|c|c|} \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \end{array}^{滤波器}_{f \times f} = \begin{array}{|c|c|c|} \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \end{array} ^{输出图像}_{(n-f+1) \times (n-f+1)} 1111111111000000000011111n×n111000111f×f=333333333(nf+1)×(nf+1)
其中, ∗ * 表示交叉相关,但是在深度学习中通常称为卷积 (实际上不是卷积,卷积操作还要对滤波器关于斜对角线进行翻转)
垂直滤波器 (以 3 × 3 3\times3 3×3为例)
[ 1 0 − 1 1 0 − 1 1 0 − 1 ] , [ 1 0 − 1 2 0 − 2 1 0 − 1 ] , [ 3 0 − 3 10 0 − 10 3 0 − 3 ] \left[ \begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1\\ \end{matrix} \right], \left[ \begin{matrix} 1&0&-1 \\ 2&0&-2 \\ 1&0&-1\\ \end{matrix} \right], \left[ \begin{matrix} 3&0&-3 \\ 10&0&-10 \\ 3&0&-3\\ \end{matrix} \right] 111000111,121000121,31030003103

水平滤波器 (以 3 × 3 3\times3 3×3为例)
[ 1 1 1 0 0 0 − 1 − 1 − 1 ] , [ 1 2 1 0 0 0 − 1 − 2 − 1 ] , [ 3 10 − 3 0 0 0 − 3 − 10 − 3 ] \left[ \begin{matrix} 1&1&1 \\ 0&0&0 \\ -1&-1&-1 \\ \end{matrix} \right], \left[ \begin{matrix} 1&2&1 \\ 0&0&0 \\ -1&-2&-1 \\ \end{matrix} \right], \left[ \begin{matrix} 3&10&-3 \\ 0&0&0 \\ -3&-10&-3 \\ \end{matrix} \right] 101101101,101202101,30310010303

把滤波器当作参数进行训练
[ w 1 w 2 w 3 w 4 w 5 w 6 w 7 w 8 w 9 ] \left[ \begin{matrix} w_{1}&w_{2}&w_{3} \\ w_{4}&w_{5}&w_{6} \\ w_{7}&w_{8}&w_{9} \\ \end{matrix} \right] w1w4w7w2w5w8w3w6w9

实现卷积:

  1. conv-forward
  2. tf.nn.conv2d
  3. tf.keras.Conv2D

填充 Padding

如果重复滤波会出现的问题:

  1. 图片会很快缩小
  2. 边缘图像利用率很低,只在最初几次用到

策略:Padding,即每次滤波用 p p p 层额外的边缘填充图像,这样输出的图像大小为 n + 2 p − f + 1 n+2p-f+1 n+2pf+1

"Valid" covolution: no padding,即 p = 0 p=0 p=0.
"Same" convalution: 输出图像和原图像大小一致,即要求填充 p = f − 1 2 p = \frac{f-1}{2} p=2f1 层,所以通常要求 f f f 是奇数.

卷积步长 Strided Covolution

滤波器以步长s进行移动,则输出图像大小为:
⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor sn+2pf+1×sn+2pf+1
其中, ⌊ ⋅ ⌋ = f l o o r ( ⋅ ) \lfloor\cdot\rfloor=floor(\cdot) =floor() 表示向下取整,

1.2 三维卷积 (如RGB图像)

类比于普通的神经网络:
在这里插入图片描述
例:如果有10个过滤器,每个过滤器的大小为 3 × 3 × 3 3\times3\times3 3×3×3,那么参数的个数为 27 ∗ 10 + 10 = 280 27*10+10=280 2710+10=280.
记号
超 参 数 记 号 p a d d i n g p [ l ] s t r i d e s [ l ] f i l t e r   s i z e f [ l ] × f [ l ] × n c [ l − 1 ] n u m b e r   o f   f i l t e r n c [ l ] \def\arraystretch{1.5} \begin{array}{c:c} 超参数 & 记号 \\ \hline padding & \color{red}p^{[l]} \\ \hline stride & \color{red}s^{[l]} \\ \hline filter\ size & f^{[l]} \times {\color{red}f^{[l]}} \times n_{c}^{[l-1]} \\ \hline number\ of\ filter & \color{red}n_{c}^{[l]} \\ \end{array} paddingstridefilter sizenumber of filterp[l]s[l]f[l]×f[l]×nc[l1]nc[l]

参 数 s h a p e W e i g h t f [ l ] × f [ l ] × n c [ l − 1 ] × n c [ l ] b i a s 1 × 1 × 1 × n c [ l ] \def\arraystretch{1.5} \begin{array}{c:c} 参数 & shape \\ \hline Weight & f^{[l]}\times f^{[l]} \times n_{c}^{[l-1]} \times n_{c}^{[l]} \\ \hline bias & 1 \times 1 \times 1 \times n_{c}^{[l]} \\ \end{array} Weightbiasshapef[l]×f[l]×nc[l1]×nc[l]1×1×1×nc[l]

l a y e r s h a p e   o f   1 s h a p e   o f   m i n p u t n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] m × n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] o u t p u t n H [ l ] × n W [ l ] × n c [ l ] m × n H [ l ] × n W [ l ] × n c [ l ] \def\arraystretch{1.5} \begin{array}{c:c:c} layer & shape\ of\ 1& shape\ of\ m\\ \hline input & n_{H}^{[l-1]} \times n_{W}^{[l-1]} \times n_{c}^{[l-1]} & m \times n_{H}^{[l-1]} \times n_{W}^{[l-1]} \times n_{c}^{[l-1]} \\ \hline output & {\color{green}n_{H}^{[l]}} \times {\color{green}n_{W}^{[l]}} \times n_{c}^{[l]} & m \times {\color{green}n_{H}^{[l]}} \times {\color{green}n_{W}^{[l]}} \times n_{c}^{[l]} \end{array} layerinputoutputshape of 1nH[l1]×nW[l1]×nc[l1]nH[l]×nW[l]×nc[l]shape of mm×nH[l1]×nW[l1]×nc[l1]m×nH[l]×nW[l]×nc[l]

其中,
n H [ l ] = ⌊ n H [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n W [ l ] = ⌊ n w [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ \begin{aligned} n_{H}^{[l]} = \left\lfloor\frac{n_{H}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\right\rfloor \\ n_{W}^{[l]} = \left\lfloor\frac{n_{w}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\right\rfloor \end{aligned} nH[l]=s[l]nH[l1]+2p[l]f[l]+1nW[l]=s[l]nw[l1]+2p[l]f[l]+1

2 池化层

average pooling
max pooling (用的更多):
1 3 2 1 2 9 1 1 1 3 2 3 6 6 1 2 → m a x   p o o l i n g f = 2 ,   s = 2 9 2 6 3 \begin{array}{|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{green}2 & \colorbox{green}1 \\ \hline \colorbox{aqua}2 & \colorbox{aqua}9 & \colorbox{green}1 & \colorbox{green}1 \\ \hline \colorbox{Salmon}1 & \colorbox{Salmon}3 & \colorbox{yellow}2 & \colorbox{yellow}3 \\ \hline \colorbox{Salmon}6 &\colorbox{Salmon}6 & \colorbox{yellow}1 & \colorbox{yellow}2 \\ \hline \end{array} \xrightarrow[max\ pooling]{f=2,\ s=2} \begin{array}{|c|c|} \hline \colorbox{aqua}9 & \colorbox{green}2 \\ \hline \colorbox{Salmon}6 & \colorbox{yellow}3 \\ \hline \end{array} 1216393621211132f=2, s=2 max pooling9623

1 3 2 1 3 2 9 1 1 5 1 3 2 3 2 8 3 5 1 0 5 6 1 2 9 → m a x   p o o l i n g f = 3 ,   s = 1 9 9 5 9 9 5 8 6 9 \begin{array}{|c|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{aqua}2 & 1 & 3 \\ \hline \colorbox{aqua}2 & \colorbox{aqua}9 & \colorbox{aqua}1 & 1 & 5\\ \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{aqua}2 & 3 & 2\\ \hline 8 & 3 & 5 &1 & 0 \\ \hline 5 & 6 &1 &2 & 9 \\ \hline \end{array} \xrightarrow[max\ pooling]{f=3,\ s=1} \begin{array}{|c|c|c|} \hline \colorbox{aqua}9 & 9 & 5\\ \hline 9 & 9 & 5 \\ \hline 8 & 6 & 9 \\ \hline \end{array} 1218539336212511131235209f=3, s=1 max pooling998996559

如果有多通道,那么每层通道都进行一样的pooling操作,输入和输出的形状为:
n H × n W × n c ↓ ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ × n c n_{H} \times n_{W} \times n_{c} \\ \downarrow \\ \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times n_{c} nH×nW×ncsn+2pf+1×sn+2pf+1×nc
其中,在池化过程中 p p p 通常为0.

3 全连接层:就是一般的神经网络层

4 经典卷积网络

经典结构:多层卷积层 - 池化层 - (Flatten后) 全连接层
如 Conv - Pool - Conv - Pool -Flatten - Fc - Fc - Softmax
一般来说, n H , n W n_{H}, n_{W} nH,nW 会逐渐降低, n c n_{c} nc 会增多。
图源:吴恩达深度学习视频

其中5表示有5层带权重的层。

图源:吴恩达深度学习视频
图源:吴恩达深度学习视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值