1

我使用Bike Sharing dataset來預測一天中的租賃數量,並給出了輸入。我將使用2011年的數據進行培訓,並使用2012年的數據進行驗證。我成功地建立了一個線性迴歸模型,但現在我正試圖找出如何使用遞歸神經網絡來預測時間序列。使用遞歸神經網絡的時間序列預測

數據集有10個屬性(例如月,工作日或不工作日,溫度,溼度,風速),所有數字,儘管屬性是日(星期日:0,星期一:1等)。

我認爲有一天可能會取決於前幾天(我不需要全部10個屬性),所以我想過使用RNN。我不太瞭解,但我讀了一些東西,也this。我想到這樣的結構。

我將有10 input neurons,a hidden layer1 output neuron。我不知道如何決定隱藏層有多少神經元。

我想我需要一個矩陣輸入層連接到隱藏層,一基體,以隱藏層連接到輸出層,和一個矩陣來隱藏層中的相鄰時間步t-1t連接,到t,到t+1。這是總共3個矩陣。

在一個教程中,激活函數是sigmoid,儘管我不確定,如果我使用sigmoid函數,我只會得到0和1之間的輸出。應該如何使用激活函數?我的計劃是重複這一n時間:

  • 對於每個訓練數據:
    • 正向傳播
      • 傳播輸入到隱含層,將它添加到以前隱藏層的傳播到當前的隱藏層。並將其傳遞給激活函數。
      • 傳播隱藏層輸出。
      • 查找錯誤和它的衍生物,其存儲在一個列表
    • 返回傳播
      • 查找列表當前層和錯誤
      • 查找當前隱層誤差
      • 商店更新權重
    • 通過multiplyi更新權重(矩陣)學習率。

這是做了正確的方法是什麼?我需要真正的數值作爲輸出,而不是0-1之間的數字。

+1

您是否考慮過使用現成的RNN包,如凱拉斯在Python?這可以讓你的任務更輕鬆。 –

回答

1

這似乎是正確的做法,如果你只是想學習基礎知識。如果你想建立一個實際使用的神經網絡,這是一個非常糟糕的方法,正如Marcin的評論所說,幾乎每個構建神經網絡用於實際應用的人都可以通過使用可用的神經網絡模擬包來做到這一點。讓我一一回答你的問題...

  1. 我不知道如何決定隱藏層有多少神經元。

沒有黃金法則爲您的神經網絡選擇正確的架構。人們從經驗中建立了許多經驗規則,通過嘗試各種組合並比較輸出來決定正確數量的神經元。一個好的起點是(你的輸入加輸出神經元的3/2倍,即(10 + 1)*(3/2)...所以你可以從隱藏層中的15/16神經元開始,然後繼續根據您的輸出減少數量。)

  1. 應該使用什麼作爲激活功能?

同樣,沒有「正確的」功能。它完全取決於什麼適合您的數據。此外,還有許多類型的S形函數,如雙曲正切,邏輯運算,RBF等等。一個好的起點將是邏輯函數,但是隻有通過反覆試驗才能找到正確的函數。

  1. 這是正確的方法嗎?我需要真正的數值作爲輸出,而不是0-1之間的數字。

所有激活功能(包括分配到輸出神經元的)會給你輸出爲0到1,你將不得不使用乘數將其轉換爲實際值,或有某種編碼與多個輸出神經元。手動編碼將會很複雜。

要考慮的另一方面是你的訓練迭代。做'n'次並沒有幫助。您需要通過反覆試驗找到最佳的訓練迭代,以避免不合適和過度擬合。

正確的做法是在Python或R中使用軟件包,這將允許您快速訓練具有大量定製的神經網絡,您可以在其中訓練和測試具有不同激活函數的多個網絡(甚至不同的訓練算法)和網絡架構,沒有太多的麻煩。通過一些試驗和錯誤,你最終會找到能夠給你想要的輸出的網絡。

+0

我的意思是,我大概可以使用一個隨時可用的軟件包,但這只是一項任務,我想徹底學習。我可以實現這個,並將結果與​​軟件包的結果進行比較。 我可以嘗試實現,並通過更改* n *,*隱藏層*,*激活函數*和* alpha *的維度,我可以嘗試優化結果。正如我所說,事情就是輸出值。在數據集中,輸出的avg爲3405.如果從隱藏層傳播到輸出時不使用sigmoid函數,該怎麼辦?我可以用隱藏層乘以權重嗎?初始神經網絡權重呢? – nope

+0

如果你不使用sigmoid函數,那麼數學上你的多層網絡可以通過乘以所有的權重並最終使其成爲一個線性方程來簡化爲單層網絡......結果模型將與迴歸模型,這種模式會失敗的神經網絡點... ... - 你當然可以這樣做,以比較你的訓練網絡如何執行迴歸模型......但隱藏層完全沒有意義...... – Gaurav