在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