2017-03-06 92 views
1

我想要做的是在當前時間步將LSTM的輸出作爲下一個時間步的LSTM輸入。所以我希望LSTM能夠在當前時間步預測單詞,並將這個單詞作爲下一個時間步的輸入。是否可以這樣做:在Keras的每個時間步獲得輸出LSTM

在訓練期間如何指定輸入數據和目標數據,即在model.fit()函數中如何指定輸入數據和目標數據?

+0

只是作爲附加信息:我還試圖用一個經常性的網絡的輸出作爲下一個輸入。事實證明,錯誤累積並且輸出總是趨於一些目標值。請參閱https://stackoverflow.com/questions/37971667/time-series-forecast-with-recurrent-elman-network-in-neurolab – wehnsdaefflae

回答

2

您不能直接在keras中執行此操作,但可以使用for循環和stateful網絡執行此操作。這是這樣的(假設你有你的句子存儲爲整數的序列與size=vocabulary_size

  1. 定義,它接受一個單詞,並返回一個狀態網絡下列之一:

    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") 
    
  2. 假設你有例子numpy的array_of_samples(preceding_word, next_word)你可以通過適合它:

    model.fit(array_of_samples[:,0], array_of_samples[:,1]) 
    
  3. 現在你可以嘗試下面的方式來預測的東西:

    sentence = [starting_word] 
    for i in range(len_of_sequence - 1): 
        sentence.append(model.predict(numpy.array([[sentence[i]]).argmax()) 
    

現在sentence店新創建的句子