眾所周知,LSTM的一大優勢就是其能夠處理變長序列。而在使用keras搭建模型時,如果直接使用LSTM層作為網絡輸入的第一層,需要指定輸入的大小。如果需要使用變長序列,那么,只需要在LSTM層前加一個Masking層,或者embedding層即可。
from keras.layers import Masking, Embedding from keras.layers import LSTM model = Sequential() model.add(Masking(mask_value= -1,input_shape=(sequenceLength, 23*3,))) model.add(LSTM(100, dropout_W=0.2, dropout_U=0.2, input_shape=(sequenceLength, 23*3,)))
使用方法:首先將序列轉換為定長序列,如,選取一個序列最大長度,不足這個長度的序列補-1。然后在Masking層中mask_value中指定過濾字符。如上代碼所示,序列中補的-1全部被過濾掉。
此外,embedding層也有過濾的功能,但與masking層不同的是,它只能過濾0,不能指定其他字符,並且因為是embedding層,它會將序列映射到一個固定維度的空間中。因此,如果訴求僅僅是讓keras中LSTM能夠處理邊長序列,使用Masking層會比使用Embedding層更加適合。