在 Keras LSTM 中获取每个时间步的输出
Obtain output at each timestep in Keras LSTM
我想要做的是将当前时间步长的 LSTM 的输出作为下一个时间步长的 LSTM 的输入。所以我想让 LSTM 在当前时间步预测单词 at 并将这个单词作为下一个时间步的输入。这样可以吗:
如何在训练期间指定输入数据和目标数据,即在 model.fit()
函数中?
您不能直接在 keras
中执行此操作,但您可以使用 for
循环和 stateful
网络执行此操作。它是这样工作的(假设你将你的句子存储为整数序列 size=vocabulary_size
:
定义一个接受一个词和returns以下词的有状态网络:
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")
假设你有一个 numpy array_of_samples
的例子 (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
存储您新创建的句子
我想要做的是将当前时间步长的 LSTM 的输出作为下一个时间步长的 LSTM 的输入。所以我想让 LSTM 在当前时间步预测单词 at 并将这个单词作为下一个时间步的输入。这样可以吗:
如何在训练期间指定输入数据和目标数据,即在 model.fit()
函数中?
您不能直接在 keras
中执行此操作,但您可以使用 for
循环和 stateful
网络执行此操作。它是这样工作的(假设你将你的句子存储为整数序列 size=vocabulary_size
:
定义一个接受一个词和returns以下词的有状态网络:
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")
假设你有一个 numpy
array_of_samples
的例子(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
存储您新创建的句子