caffe繪製訓練過程中的accuracy、loss曲線

訓練模型並保存日誌文件

       首先建立一個訓練數據的腳本文件train.sh,其內容如下,其中,2>&1   | tee examples/mnist/mnist_train_log.log 是log日誌文件的保存目錄。

#!/usr/bin/env sh  
set -e  
  
TOOLS=./build/tools  
  
$TOOLS/caffe train  --solver=examples/mnist/lenet_solver.prototxt 2>&1  | tee examples/mnist/mnist_train_log.log  

訓練完成後,會在examples/mnist文件夾下生成mnist_train_log.log日誌



繪製曲線

       首先將文件夾caffe/tools/extra下的parse_log.sh 、extract_seconds.py、plot_training_log.py.example複製到上一步log日誌文件的保存目錄下。
然後,將plot_training_log.py.example改爲plot_training_log.py,並執行以下命令就可以繪製曲線:
python plot_training_log.py 6 train_loss.png mnist_train_log.log

        caffe支持多種曲線繪製,指定不同的類型參數即可,具體參數如下:
Notes: 
    1. Supporting multiple logs. 
    2. Log file name must end with the lower-cased ".log". 
Supported chart types: 
    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 


遇到的問題:

問題1:
       剛開始的時候發現類型參數爲0-3的時候,可以正常繪製曲線,但是類型參數爲4-7的時候,出現下面的錯誤:


解決方法:
       打開生成的mnist_train_log.log.train文件後,發現確實是提取TrainingLoss數據有問題,如圖1;後來按博客點擊打開鏈接中的方法將parse_log.sh進行修改。對於parse-log.sh生成的文件mnist_train_log.log.train,caffe自帶的parse-log.sh提取到的是第9列(第9個域),也就是帶S/10的那些數,我將它改成第13個域,也就是loss及=符號後的數,真正的loss在第13列,如圖2、3。

                                           圖1

                                           圖2

                                           圖3


問題2:
       解決完上述問題後,類型參數爲4-7的時候,還是不能繪製曲線,出現如下問題:IndexError: list index out of range


解決方法:
       羣裏大神幫忙找到問題了,原來是mnist_train_log.log.train中最後一行存在數據缺失問題,無奈,日誌文件真的沒有數據了,只能僞造一組數據了,如下圖,紅色圈中的就是我自己加的。但是,感覺這樣做不好,關於這個問題,大家有遇到過沒,怎麼解決的,可以交流一下



修改前的:


修改後的:









       



發佈了81 篇原創文章 · 獲贊 51 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章