keras.layers.recurrent.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)
轉載:https://blog.csdn.net/jiangpeng59/article/details/77646186
核心參數
units:
輸出維度
input_dim:
輸入維度,當使用該層為模型首層時,應指定該值(或等價的指定input_shape)
return_sequences:
布爾值,默認False,控制返回類型。若為True則返回整個序列,否則僅返回輸出序列的最后一個輸出
input_length:
當輸入序列的長度固定時,該參數為輸入序列的長度。當需要在該層后連接Flatten層,然后又要連接Dense層時,需要指定該參數,否則全連接的輸出無法計算出來
輸入shape
形如(samples,timesteps,input_dim)的3D張量
輸出shape
如果return_sequences=True:返回形如(samples,timesteps,output_dim)的3D張量否則,返回形如(samples,output_dim)的2D張量
備注:
1.輸入和輸出的類型
相對之前的tensor,這里多了個參數timesteps.舉個栗子,假如輸入100個句子,每個句子由5個單詞組成,每個單詞用64維詞向量表示。那么samples=100,timesteps=5,input_dim=64,可以簡單地理解timesteps就是輸入序列的長度input_length(視情而定).
2.units
假如units=128,就一個單詞而言,可以把LSTM內部簡化看成Y=X1×64W64×128 ,X為上面提及的詞向量比如64維,W中的128就是units,也就是說通過LSTM把詞的維度由64轉變成了128.
3.return_sequences
我們可以把很多LSTM層串在一起,但是最后一個LSTM層return_sequences通常為False,具體看下面的栗子:
Sentence: you are really a genius
model = Sequential() model.add(LSTM(128, input_dim=64, input_length=5, return_sequences=True)) model.add(LSTM(256, return_sequences=False))
(1)我們把輸入的單詞,轉換為維度64的詞向量,小矩形的數目即單詞的個數input_length
(2)通過第一個LSTM中的Y=XW,這里輸入為維度64,輸出為維度128,而return_sequences=True,我們可以獲得5個128維的詞向量V1’..V5’
(3)通過第二個LSTM,此時輸入為V1’..V5’都為128維,經轉換后得到V1”..V5”為256維,最后因為return_sequences=False,所以只輸出了最后一個紅色的詞向量