tf.nn.conv2d中padding參數的規則介紹

文章來源:《深度學習之TensorFlow:入門、原理與進階實戰》

padding屬性的意義是定義元素邊框和元素內容之間的空間。

在tf.nn.conv2d函數中,當變量padding爲VALID和SAME,函數具體是怎麼計算的呢?其實是有公式的。爲了方便演示,先定義幾個變量:

  • 輸入的尺寸高和寬定義成:in_height,in_width
  • 卷積核的高和寬定義成filter_height、filter_width
  • 輸入的尺寸中高和寬定義成output_height、out_width
  • 步長的高寬方向定義成strides_height、strides_width.

一 VALID情況:邊緣不填充

輸入寬和高的公式分別爲:
output_width=(in_width-filter_width+1)/strides_width #(結果向上取整)
output_height=(in_height-filter_height+1)/strides_height #(結果向上取整)

二 SAME情況:邊緣填充

# 輸出的寬和高將與卷積核沒關係,具體公式如下:
output_width=in_width/strides_width #(結果向上取整)

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

# 這裏有一個很重要的知識點——補零的規則,見如下公式:
pad_height=max((out_height-1)*strides_height+filter_height-in_height,0)

pad_width=max((out_width-1)*strides_width+filter_width-in_width,0)

pad_top=pad_height/2

pad_bottom=pad_height-pad_top

pad_left=pad_width/2

pad_right=pad_width-pad_left

上面公式中

  • pad_height:代表高度方向上要填充0的行數。
  • pad_width:代表寬度方向要填充0的列數。
  • pad_top、pad_bottom、pad_left、pad_right分別代表上、下、左、右這4個方向填充0的行、列數。

三 規則舉例

下面通過一個例子來理解一下padding規則。

假設用一個一維數據來舉例,輸入是13,filter是6,步長是5,對於padding的取值有如下表示:

3.1 當padding='VALID’

生成寬度爲(13-6+1)/5=2(向上取整)個數字。

inputs:

(1 2 3 4 5 6) 7 8 9 10 11 12 13
1 2 3 4 5 (6 7 8 9 10 11) 12 13

12和13丟棄

3.2 當padding=‘SAME’,

生成的寬度爲13/5=3(向上取整)

Padding的方式可以如下計算:

Pad_width=(3-1)*5+6-13=3
Pad_left=pad_width/2=3/2=1
Pad_rigth=Pad_width-pad_left=2
在左邊補一個0,右邊補2個0

input:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 0
(0 1 2 3 4 5) 6 7 8 9 10 11 12 13 0 0
0 1 2 3 4 (5 6 7 8 9 10) 11 12 13 0 0
0 1 2 3 4 5 6 7 8 9 (10 11 12 13 0 0)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章