在tf.nn.conv2d函数中,padding能够选择VALID和SAME两种模式,两种模式获得的卷积输出尺寸计算方式不一样。ide
一、当padding=VALID函数
输出宽和高计算公式为:spa
output_height=(in_height-filter_height+1)/strides_height(结果向上取整)top
output_width=(in_width-filter_width+1)/strides_width(结果向上取整)filter
二、当padding=SAME移动
此时须要进行补零di
output_height=in_height/strides_height(结果向上取整)co
output_width=in_width/strides_width(结果向上取整)参数
补零的参数
pad_height = max((out_height - 1) x strides_height + filter_height - in_height, 0)(高度方向填充0的行数)
pad_width = max((out_width - 1) x strides_width + filter_width - in_width, 0)(宽度方向填充0的列数)
pad_top = pad_height / 2(上方向填充0的行数,向下取整)
pad_bottom = pad_height - pad_top(下方向填充0的行数)
pad_left = pad_width / 2(左方向填充0的列数,向下取整)
pad_right = pad_width - pad_left(右方向填充0的列数)
三、举例
输入为13x1的一维矩阵,filter为6x1,步长为5
当padding=VALID
output_width=(13-6+1)/5=2(向上取整)
因此计算时舍弃了最后两个值
当padding=SAME
output_width=13/5=3(向上取整)
pad_width = max((3 - 1) x 5 + 6 - 13, 1) = 3
pad_left = pad_width / 2 = 3 / 2 = 1 (向下取整)
pad_right = pad_width - pad_left = 2
因此左边补一个0,右边补两个0