在訓練階段:
您可以使用兩個輸入(一個目標,一個用於輸入,還有的1偏移在這兩個序列之間)並重新使用嵌入層。 如果輸入句子爲[1,2,3,4],則可以從中生成兩個序列:in = [1,2,3],out = [2,3,4]。然後你可以使用Keras的功能API來重新使用嵌入層:
emb1 = Embedding(in)
emb2 = Embedding(out)
predict_emb = LSTM(emb1)
loss = mean_squared_error(emb2, predict_emb)
注意這不是Keras代碼,只是僞代碼。
在測試階段:
通常情況下,你需要編寫自己的解碼功能。首先,你從一開始選擇一個詞(或幾個詞)。然後,將該詞(或短詞序列)送入網絡以預測下一個詞的嵌入。在這一步,你可以定義你自己的樣本函數,例如:你可能想要選擇嵌入距離預測的最近的單詞作爲下一個單詞,或者你可能想要從一個分佈中抽取下一個單詞,更接近預測嵌入的嵌入具有較大的被選擇的概率。一旦你選擇了下一個單詞,然後將它提供給網絡並預測下一個單詞,等等。
因此,您需要一次生成一個單詞(換句話說,一個嵌入),而不是將整個序列輸入到網絡。
如果上面的語句是你過於抽象,這裏是一個很好的例子:https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py
85號線是引進部分,它隨機選擇從陰莖一小塊文本上下工夫。從第90行開始有一個循環,其中每個步驟對一個字符進行採樣(這是一個char- rnn,所以每個時間步輸入一個char。對於你的情況,它應該是一個字,而不是字符):L95預測下一個字符的分佈,來自分佈的L96個樣本。希望這已經夠清楚了。
您是否得到了這個工作?如果是這樣,任何鏈接到代碼/博客(甚至自我答覆) - 正確標記的答案只是顯示分類方法,而不是你想要做的迴歸方法。 –