tensorflow中padding規則


在tf.nn.conv2d函數中,padding可以選擇VALID和SAME兩種模式,兩種模式得到的卷積輸出尺寸計算方式不同。

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

1、當padding=VALID

輸出寬和高計算公式為:

output_height=(in_height-filter_height+1)/strides_height(結果向上取整)

output_width=(in_width-filter_width+1)/strides_width(結果向上取整)

2、當padding=SAME

此時需要進行補零

output_height=in_height/strides_height(結果向上取整)

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的列數)

3、舉例

輸入為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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM