from keras.preprocessing.sequence import pad_sequences
keras只能接受長度相同的序列輸入。因此如果目前序列長度參差不齊,這時需要該模塊
該函數是將序列轉化為經過填充以后的一個長度相同的新序列新序列
Sequential更准確的應該理解為堆疊,通過堆疊許多層,構建出深度神經
Sequential模型的核心操作是添加layers(圖層),以下展示如何將一些最流行的圖層添加到模型中:
如下代碼向模型添加一個帶有64個大小.3 * 3的過濾器的卷積層:
from keras.models import Sequential from keras.layers import Conv2D model = Sequential() model.add( Conv2D(64, (3, 3), activation='relu') )
嵌入層將正整數(下標)轉換為具有固定大小的向量,如 [ [4],[20] ] ->[ [0.25,0.1],[0.6,-0.2] ],Embedding層只能作為模型的第一層
from keras.layers import Embedding embedding_layer = Embedding(VOCAB_SIZE + 1, EMBEDDING_DIM, weights=[embedding_matrix], input_length=TIME_STAMPS, trainable=False, mask_zero=True)
這里的參數解釋一下:
-
input_dim:大或等於0的整數,字典長度,即輸入數據最大下標+1
-
output_dim:大於0的整數,代表全連接嵌入的維度
-
init:初始化方法,為預定義初始化方法名的字符串,或用於初始化權重的Theano函數。該參數僅在不傳遞
weights
參數時有意義。 -
weights:權值,為numpy array的list。該list應僅含有一個如(input_dim,output_dim)的權重矩陣
-
W_regularizer:施加在權重上的正則項,為WeightRegularizer對象
-
W_constraints:施加在權重上的約束項,為Constraints對象
-
mask_zero:布爾值,確定是否將輸入中的‘0’看作是應該被忽略的‘填充’(padding)值,該參數在使用遞歸層處理變長輸入時有用。設置為
True
的話,模型中后續的層必須都支持masking,否則會拋出異常 -
input_length:當輸入序列的長度固定時,該值為其長度。如果要在該層后接
Flatten
層,然后接Dense
層,則必須指定該參數,否則Dense
層的輸出維度無法自動推斷。 -
dropout:0~1的浮點數,代表要斷開的嵌入比例
關於Embedding層,請參考
from keras.models import Sequential from keras.layers import Bidirectional, LSTM model.add( Bidirectional( LSTM(128, return_sequences=True) ) )
return_sequences: 如果為True的話,只返回最后一個狀態的輸出,是一個(samples,output_dim)2D張量,如果是False,則是返回所有序列狀態的輸出,是一個(samples,timesteps,output_dim)3D張量
LSTM中的128,即是units參數,表示輸出向量維度,請參考
關於其過程,請參考,下面的圖片來自該博客:
Dense就是常用的全連接層
from keras_contrib.layers.crf import CRF crf_layer = CRF(self.NUM_CLASSES, sparse_target=True) model.add(crf_layer)
八、compile