【卷积神经网络】图像卷积、池化操作后的特征图大小计算方法

一、卷积操作

输入图像为正方形

输入图像尺寸为 W ∗ W W*W WW,卷积核尺寸为 F ∗ F F*F FF,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为 N ∗ N ∗ C N*N*C NNC
N = W − F + 2 ∗ P S + 1 N=\frac{W-F+2*P}{S} +1 N=SWF+2P+1

输入图像为矩形

输入图像尺寸为 W ∗ H W*H WH,卷积核尺寸为 F ∗ F F*F FF,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为 W ′ ∗ H ′ ∗ C W'*H'*C WHC,计算方式如下:
W ′ = W − F + 2 ∗ P S + 1 W'=\frac{W-F+2*P}{S}+1 W=SWF+2P+1
H ′ = H − F + 2 ∗ P S + 1 H'=\frac{H-F+2*P}{S}+1 H=SHF+2P+1
对于三通道的图像进行卷积,使用的是三维卷积核,比如说下图所示:
在这里插入图片描述
图源:TensorFlow中padding卷积的两种方式“SAME”和“VALID”

输出的矩阵会把三个通道分别卷积然后叠加起来形成一个二维矩阵,卷积核的个数决定了输出二维矩阵的个数,所以输出矩阵的通道数是卷积核的个数。如果出现除不尽的情况,卷积计算操作向下取整

二、池化操作

输入图像尺寸为 W ∗ H ∗ D W*H*D WHD(其中D是图像深度),池化核尺寸为 F ∗ F F*F FF,步长为S,一般不在池化操纵中使用padding操作,经过池化之后输出的图像尺寸为 W ′ ∗ H ′ ∗ D W'*H'*D WHD,计算方式如下:
W ′ = W − F S + 1 W'=\frac{W-F}{S}+1 W=SWF+1
H ′ = H − F S + 1 H'=\frac{H-F}{S}+1 H=SHF+1
池化不改变输入图像的通道数。如果出现除不尽的情况,池化计算操作向上取整

padding模式选择

在tensorflow中,你可以选择使用何种padding策略,有VALID和SAME可供选择。注意,和上面卷积操作有些许不同,这两种操作默认是向上取整的,因为tf的源代码中是这样写的:

If padding == "SAME":
      output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])

    If padding == "VALID":
      output_spatial_shape[i] =
        ceil((input_spatial_shape[i] -
              (spatial_filter_shape[i]-1) * dilation_rate[i])
              / strides[i])

dilation_rate为一个可选的参数,默认为1,这里我们先不管。那么这两种策略就可以写成如下公式。
VALID策略:
若padding=VALID,那么输出尺寸为 N = W − F + 1 S N=\frac{W-F+1}{S} N=SWF+1,向上取整。
SAME策略:
若padding=SAME,那么输出尺寸为 N = W S N=\frac{W}{S} N=SW,向上取整,使用padding填充,由上面计算可得 p a d d i n g = F − 1 2 padding=\frac{F-1}{2} padding=2F1
例子:TensorFlow中padding卷积的两种方式“SAME”和“VALID”

使用SAME:在这里插入图片描述

SAME结果:在这里插入图片描述
5/2=2.5,向上取整是3。
使用VALID:
在这里插入图片描述
VALID结果:
在这里插入图片描述
(5-3+1)/2=1.5,向上取整2。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值