繪制loss曲線
第一步保存日誌文件,用重定向即可:
$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曲線