keras:4)LSTM函數詳解

LSTM層

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)

核心參數
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,具體看下面的栗子。

栗子
Sentence01: 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,所以只輸出了最後一個紅色的詞向量

參考:
https://www.zhihu.com/question/41949741?sort=created
http://www.cnblogs.com/leeshum/p/6133290.html
http://spaces.ac.cn/archives/4122/ (word2vec和Ebedding的區別)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章