1. 程式人生 > >繪制loss曲線

繪制loss曲線

image logs images bsp 正常 不能 腳本 com 開始

第一步保存日誌文件,用重定向即可:

$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log

第二步直接繪制:

python plot_training_log.py 2 testloss.png out.log

2是選擇畫哪種類型的圖片,具體數字是代表哪個類型可以查看幫助信息看到:

0: Test accuracy vs. Iters

1: Test accuracy vs. Seconds

2: Test loss vs. Iters

3: Test loss vs. Seconds

4: Train learning rate vs. Iters

5: Train learning rate vs. Seconds

6: Train loss vs. Iters

7: Train loss vs. Seconds

testloss.png是生成圖片的名字,要求必須是png類型的文件

out.log是之前生成的日誌文件

有個教程讓你先生成解析日誌文件:

python parse_log.py out.log ./

註意最後一個是./,是保存的路徑,最後會生成.train和.test兩個文件。

實際上我覺得沒有必要執行這一步,直接繪制曲線就好,繪制曲線中間也會生成這兩個文件,因為plot_training_log.py本身要調用parse_log.py的shell腳本。並且生成的文件第一行是自帶‘#‘,但是用這個解析生成的反而是不帶的。

跑項目代碼時,生成的日誌文件有一點問題,一個正常的日誌文件應該是這樣:

技術分享

而我的日誌文件是這樣;

技術分享即在Iteration前我的日誌文件沒有I0619 10:29:45.757735 8944 solver.cpp:280] Solving deeplab_largeFOV 這句話,在parse_log.sh裏有這樣一句:grep ‘] Solving ‘ $1 > aux3.txt,要尋找 ‘] Solving ‘,如果沒有,生成的aux3.txt就為空,

因為aux4.txt是由aux3.txt來的,這樣就無法生成aux4.txt,也就報錯說不能paste和rm aux4.txt。在extract_seconds.py中也是通過尋找sovling來確定開始時間的。如果單獨用parse_log.py生成日誌文件,不會報aux4.txt的錯誤,但會報extract_seconds.py

的錯誤。所以在Iteration 0前面一行加上沒有這句話,就能解決問題。

中間

繪制loss曲線