我想做的是将当前时间步的LSTM输出作为下一时间步的LSTM输入。因此,我希望LSTM在当前时间步预测该单词,并将该单词作为下一时间步的输入。然后可以这样做吗?
在训练期间如何在model.fit()
功能中指定输入和目标数据?
最佳答案
您不能直接在keras
中执行此操作,但是可以使用for
循环和stateful
网络来执行此操作。这是这样的(假设您使用size=vocabulary_size
将句子存储为整数序列:
定义一个有状态网络,该网络接受一个单词并返回以下单词:
model = Input(batch_size=(batch_size, 1, 1))
model = Embedding(size_of_vocabulary, output_size, input_length=1)(input)
model = LSTM(lstm_1st_layer_size, return_sequences=True, stateful=True)(model)
....
model = LSTM(lstm_nth_layer_size, return_sequences=True, stateful=True)(model)
model = Dense(vocabulary_size, activation="softmax")
model.compile(loss="sparse_categorical_crossentropy", optimizer="rmsprop")
假设您有示例
array_of_samples
的numpy (preceding_word, next_word)
,则可以通过以下方式使其适合:model.fit(array_of_samples[:,0], array_of_samples[:,1])
现在,您可以尝试通过以下方式预测内容:
sentence = [starting_word]
for i in range(len_of_sequence - 1):
sentence.append(model.predict(numpy.array([[sentence[i]]).argmax())
现在
sentence
存储您新创建的句子