2017-10-10 245 views
2

一個Keras介紹Seq2Seq模式已經在幾個星期前公佈了可以在這裏找到:https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html 我真的不理解這個代碼的一部分:Keras Seq2Seq介紹

decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True) decoder_outputs, _, _= decoder_lstm(decoder_inputs,initial_state=encoder_states) decoder_dense = Dense(num_decoder_tokens, activation='softmax') decoder_outputs = decoder_dense(decoder_outputs)

這裏decoder_lstm被定義爲。它是一個尺寸爲latent_dim的圖層。我們使用編碼器的狀態作爲解碼器的initial_state。

我不明白的是爲什麼在LSTM層之後添加一個密集層以及爲什麼它正在工作? 解碼器應該返回所有的序列,因爲return_sequences = True,所以在工作之後添加密集層怎麼可能?

我想我錯過成才這裏,感謝您的幫助

回答

2

雖然通常情況下使用2D數據(batch,dim)作爲緻密層的投入,Keras的新版本,您可以使用3D數據(batch,timesteps,dim)

如果你沒有壓扁這個3D數據,你的密集層的行爲就好像它將應用於每個時間步驟一樣。並且您將獲得如下輸出:(batch,timesteps,dense_units)

您可以在下面檢查這兩個小模型,並確認與時間步驟無關,兩個密集圖層都具有相同數量的參數,顯示其參數僅適用於最後一個維度。

from keras.layers import * 
from keras.models import Model 
import keras.backend as K 

#model with time steps  
inp = Input((7,12)) 
out = Dense(5)(inp) 
model = Model(inp,out) 
model.summary() 

#model without time steps 
inp2 = Input((12,)) 
out2 = Dense(5)(inp2) 
model2 = Model(inp2,out2) 
model2.summary() 

結果將顯示在這兩種情況下的65(12 * 5 + 5)參數。