tensorflow中padding規則

在tf.nn.conv2d函數中,padding能夠選擇VALID和SAME兩種模式,兩種模式獲得的卷積輸出尺寸計算方式不一樣。ide

  • 輸入尺寸高和寬:in_height、in_width
  • 卷積核的高和寬:filter_height、filter_width
  • 輸出尺寸高和寬:output_height、output_width
  • 步長移動高和寬:strides_height、strides_width

一、當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

相關文章
相關標籤/搜索