2017-04-17 148 views
16

現在幾天來,我試圖用LSTM建立一個簡單的正弦波序列生成,目前爲止沒有任何成功的一瞥。使用PyTorch生成LSTM時間序列

我從time sequence prediction example

開始所有我想要做的不同是:

  • 使用不同的優化(如RMSprob)比LBFGS
  • 嘗試不同的信號(多個正弦波分量)

這是鏈接到my code。 「experiment.py」是主文件

我做的是:

  • 我產生人爲的時間序列數據(正弦波)
  • 我砍的時間序列數據成小序列
  • 輸入到我的模型是時間0序列... T,並且輸出時間1序列... T + 1

什麼情況是:

  • 訓練和驗證的損失下降順利
  • 測試損耗非常低
  • 然而,當我嘗試生成任意長度的序列,來自種子(從測試數據的隨機序列)起始,一切都出錯了。輸出始終單位出

Shape of the generated signal

我根本看不出來是什麼問題。我現在正在玩這個星期一個星期,沒有進展。 我會很感激任何幫助。

謝謝

+6

當我試圖複製這個問題時發現它已經在git hub代碼中修復了。看來問題已經被提出並在[這裏]回答(https://discuss.pytorch.org/t/lstm-time-sequence-generation/1916)。 @OmarSamir也許你可以在這裏發佈解決方案。你也應該將問題鏈接到github的特定提交(sp查看你的問題的人會看到相同的輸出)。 – kabdulla

回答

2

這是正常現象,是因爲你的網絡是太自信了輸入信號的質量,並且不學會靠了過去(在它的內部狀態)不夠,對負全部依靠輸入。當您在生成設置中將網絡應用於其自己的輸出時,網絡輸入不如在培訓或驗證情況下獲得真實輸入那樣可靠。

我對你有兩種可能的解決方案:

  • 第一種是最簡單的,但不太直觀之一:高斯噪聲的一點點添加到您的輸入。這將迫使網絡更多地依賴其隱藏狀態。

  • 第二個問題是最明顯的解決方案:在訓練過程中,餵食它不是真實的輸入,而是以一定的概率p輸出它的生成輸出。從p = 0開始訓練並逐漸增加訓練,以便它能獨立地學習一般的更長和更長的序列。這稱爲調度採樣,您可以在這裏閱讀更多關於它的信息:https://arxiv.org/abs/1506.03099