這篇是修正前面幾篇的結果並統整
說認真,當初看到這三篇的結果時,真的打擊han大耶,這真的跟我想得不一樣,看完結果後本來沒有想要繼續第四篇的Orz
好險好奇心旺盛的我,今天挑戰我原本第四天要實測的內容過程中,發現了一個超級天大無敵白癡的bug,讓我與各位分享分享這個bug吧XD
事情是這樣的,當初我在建立dataset的時候,有遇到這個問題
RuntimeWarning: divide by zero encountered in double_scalars
RuntimeWarning: invalid value encountered in multiply
當初我很重視這個問題,因為我很明確知道這個絕對會影響到我的結果,所以爬了一下文,並「的確有修復這個問題」
很好啊? 所以怎麼了?
重點來了,因為是在np計算中出現的,我為了這個而特別使用np.where函數來幫助運算,但龜毛如我,認為如果在np.array裡面有處理好的話我就可以不用耗這個計算了呀!
np.array在遇到這樣的情況下會幫你直接輸出成0我信了這說法
我信了這說法
我信了這說法
所以看到這裡,各位知道我遇到什麼問題了嗎?
作者你也太不專業了吧~
其實我還有特別去查過,keras在訓練時,如果遇到nan也就是一般divide by 0的值時,是無法有loss數值的,但我的LSTM可以正常訓練,所以我才放心地讓它去 (真的去了...
那你怎麼發現的啦?
我今天在準備我的「暴力系列」最終章時,因為會用到比較特殊的網路處理資料,所以在處理過程中,該網路就是出現loss為nan,此時我才確定了問題點...而且後來想想LSTM的loss永遠都是以1來傳遞,所以一定會有loss (哀~誰能想到Orz
話就說到此,我們來看看真實的結果吧!
| 測試樣本 | 結果 |
|---|---|
| 500 | ![]() |
| 750 | ![]() |
| 1000 | ![]() |
| 1500 | ![]() |
| 測試樣本 | 結果 |
|---|---|
| 1800 | ![]() |
| 1750 | ![]() |
| 1700 | ![]() |
| 1650 | ![]() |
| 1600 | ![]() |
| 1550 | ![]() |
| 測試樣本 | 結果 |
|---|---|
| 1800 | ![]() |
| 1750 | ![]() |
| 1700 | ![]() |
| 1650 | ![]() |
| 1600 | ![]() |
| 1550 | ![]() |
挖屋~看起來正經多了 !! (拜託我都快哭了
以下我大概統整了一下我認為的優缺點 :
| 篇章 | 目的 | 優點 | 缺點 |
|---|---|---|---|
| 第一篇 | 期望預測下一次交易價格 | 儘管輸出並不理想,但可以發現它的確在小的training dataset下有學習能力。 | 訓練超級久,網路過大,有很多空間可以簡化 |
| 第二篇 | 希望可以預測action |
較符合我們需求:低點買進高點賣出 | 只有預測下一次的可能性,波段過小沒效益 |
| 第三篇 | 希望可以提早佈局地預測action |
對於強烈震幅會有很好的預測 | 沒有實用度,除了波段過小,同時對於持續上或持續下都無法有好的預測 |
上方是我的小小統計,這也是我所預期的 (嗚嗚嗚...
從「第二篇」和「第三篇」的缺點下手,這也是我在上一篇所說,我們期望能夠預測「趨勢」。 整理就先到這邊吧! 程式碼都在那三篇的底部XD 無聊可以玩玩。 暴力系列剩下最後一篇,能不能明天更呢? 我也不知道XD