訓練完後發現有訓練成功但程式碼有問題,在save時竟然失敗:
Traceback (most recent call last):
File "E:\proj\MacroHFT\MacroHFT\RL\agent\low_level.py", line 442, in <module>
agent.train()
File "E:\proj\MacroHFT\MacroHFT\RL\agent\low_level.py", line 368, in train
best_model_path = os.path.join("./result/low_level",
File "C:\Users\j3020\anaconda3\envs\macrohft\lib\ntpath.py", line 143, in join
genericpath._check_arg_types('join', path, *paths)
File "C:\Users\j3020\anaconda3\envs\macrohft\lib\genericpath.py", line 152, in _check_arg_types
raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'int'
檢查了以後發現原來是low_level.py: 369
行的地方有問題,作者存模型的命名有些問題,這邊把原本的self.label
改成str(int(args.alpha))
;並且由於後面的high_level訓練需要使用到low_level的結果,因此等等high_level.py
也必須要修改程式碼。
...
best_model_path = os.path.join("./result/low_level",
'{}'.format(self.dataset), '{}'.format(self.clf), str(int(args.alpha)), 'best_model.pkl')
...
然後依據low-level policy optimization setup #6的作者回復來看,原本low_level.sh
的內容有錯誤,我的low_level.bat
應該要修改。
依據討論串的內容,被tune過的最佳alpha
參數應該是{0,1,4},按照slope
的參數順序是slope_1: alpha=1
,slope_2: alpha=4
,slope_3: alpha=0
;那這樣vol
應該也要遵循同樣的邏輯才對:
修改後的low_level.bat
如下
@echo off
mkdir .\logs\low_level\ETHUSDT 2>nul
python -u ./MacroHFT/RL/agent/low_level.py --alpha 1 --clf slope --dataset ETHUSDT --device cuda:0 --label label_1 > .\logs\low_level\ETHUSDT\slope_1.log 2>&1
python -u ./MacroHFT/RL/agent/low_level.py --alpha 4 --clf slope --dataset ETHUSDT --device cuda:0 --label label_2 > .\logs\low_level\ETHUSDT\slope_2.log 2>&1
python -u ./MacroHFT/RL/agent/low_level.py --alpha 0 --clf slope --dataset ETHUSDT --device cuda:0 --label label_3 > .\logs\low_level\ETHUSDT\slope_3.log 2>&1
python -u ./MacroHFT/RL/agent/low_level.py --alpha 1 --clf vol --dataset ETHUSDT --device cuda:0 --label label_1 > .\logs\low_level\ETHUSDT\vol_1.log 2>&1
python -u ./MacroHFT/RL/agent/low_level.py --alpha 4 --clf vol --dataset ETHUSDT --device cuda:0 --label label_2 > .\logs\low_level\ETHUSDT\vol_2.log 2>&1
python -u ./MacroHFT/RL/agent/low_level.py --alpha 0 --clf vol --dataset ETHUSDT --device cuda:0 --label label_3 > .\logs\low_level\ETHUSDT\vol_3.log 2>&1
之後high_level.py
的內容需要讀取訓練好的low_level
Agent參數;由於讀取的路徑是寫死的,並且是錯誤的,因此也必須要修改:high_level.py: 129~138
修改後如下
model_list_slope = [
"./result/low_level/ETHUSDT/slope/1/best_model.pkl",
"./result/low_level/ETHUSDT/slope/4/best_model.pkl",
"./result/low_level/ETHUSDT/slope/0/best_model.pkl"
]
model_list_vol = [
"./result/low_level/ETHUSDT/vol/1/best_model.pkl",
"./result/low_level/ETHUSDT/vol/4/best_model.pkl",
"./result/low_level/ETHUSDT/vol/0/best_model.pkl"
]
目前依據以上的修改結果重新開始了訓練,目前還在訓練中,可能還有一些問題需要偵錯。
測試到這邊再加上讀完該Github Repo的Issue我感覺涼涼,作者的程式碼問題頗多,不過既然都花時間嘗試了,我還是打算有始有終,所以我會先把這些小bug都處理掉,完整的跑完訓練並驗證一下結果是否跟論文內容相符合,畢竟這篇Paper很新又與很接近我的需求;只能祈禱算法的程式沒有問題,只有這些路徑跟可調參數有些小bug。