1
我想要做的是在當前時間步將LSTM的輸出作爲下一個時間步的LSTM輸入。所以我希望LSTM能夠在當前時間步預測單詞,並將這個單詞作爲下一個時間步的輸入。是否可以這樣做:在Keras的每個時間步獲得輸出LSTM
在訓練期間如何指定輸入數據和目標數據,即在model.fit()
函數中如何指定輸入數據和目標數據?
我想要做的是在當前時間步將LSTM的輸出作爲下一個時間步的LSTM輸入。所以我希望LSTM能夠在當前時間步預測單詞,並將這個單詞作爲下一個時間步的輸入。是否可以這樣做:在Keras的每個時間步獲得輸出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")
假設你有例子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
店新創建的句子
只是作爲附加信息:我還試圖用一個經常性的網絡的輸出作爲下一個輸入。事實證明,錯誤累積並且輸出總是趨於一些目標值。請參閱https://stackoverflow.com/questions/37971667/time-series-forecast-with-recurrent-elman-network-in-neurolab – wehnsdaefflae