在训练阶段:
您可以使用两个输入(一个目标,一个用于输入,还有的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个样本。希望这已经够清楚了。
您是否得到了这个工作?如果是这样,任何链接到代码/博客(甚至自我答复) - 正确标记的答案只是显示分类方法,而不是你想要做的回归方法。 –