1. 程式人生 > >Keras入門(5)——卷積padding的補0策略

Keras入門(5)——卷積padding的補0策略

0. 前言

作為最基礎的卷積層——CNN,我們應當對他最為熟悉。但是在實現的時候,忽然發現對於其第一步驟,就有困惑的地方,那就是padding,也就是補0策略。

在Keras中,卷積層的定義是如下:

keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros'
, kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

可以看到padding是一個引數,它有可選值,根據官方文件說明,它總共包含3種可選值:’valid’,’same’和‘casual’.那麼這每個意思也進行了描述,但是具體如何操作呢?

“valid”代表只進行有效的卷積,即對邊界資料不處理。這個是非常容易理解的,即不進行補0,能有多少卷積就有多少卷積,但是會拋棄一些資料,而且每次總是最後的數字被拋棄。這也可能造成右邊界資料沒有顧忌到的缺陷。

例如,一個序列有13長,我們的kernel_size為6,步長為5,那麼採用valid的補0策略的卷積後的大小為2,即

13 6 5
+ 1

“same”代表進行補0卷積,但是它的補0也是有上限的,它的第一步卷積補0為kernel_size-strides,然後到最後剩多少補多少0,如果採用same補0策略的卷積,那麼上面例子中的卷積後大小為3,即

13 6 5 + 1

“casual”則是代表具有時序關係的卷積,即output[t]不依賴於input[t+1:]。當對不能違反時間順序的時序訊號建模時有用。一般不使用這種。