前言:我們在訓練網絡的時候,網絡訓練完畢後,需要可視化訓練過程中loss和accuracy的變化情況,方便了解整個訓練過程模型的優化情況。(之前使用caffe自帶的腳本繪製曲線圖,出現各種報錯,遂採用python腳本來繪製曲線。)
1、保存訓練過程的log。
我們在執行訓練指令時,可以通過以下方式保存訓練日誌。
#這是sh指令,最後一句爲設置保存訓練日誌
/data_1/caffe-master/build/tools/caffe train \
-solver /data_1/ResNet/mobilenet_resnet18_solver.prototxt \
--weights /data_1/model/mobile_resnet_iter_300000.caffemodel \
2>&1 | tee train.log
2、使用Caffe自帶的log文件的解析工具parse_log.py解析訓練過程保存的日誌。
parse_log.py文件在caffe root路徑的 CAFFE_ROOT/tools/extra/下,(此處不要直接把parse_log.py移出來使用,因爲它需要依賴該路徑下的extract_seconds.py等文件)
#python parse_log.py文件路徑 log日誌路徑 解析文件保存路徑
python CAFFE_ROOT/tools/extra/parse_log.py train.log ./
解析之後會得到train和test兩個解析文件。
文件中的內容如下:(ps:這裏是parse_log.py,而不是parse_log.sh,兩個腳本生成的格式是不一樣的。)
3.最後使用python腳本繪製loss和accuracy的變化曲線。
import pandas as pd
import matplotlib.pyplot as plt
train_log = pd.read_csv("/data_1/deep_learning_layer/layer/Resnet18/net/ResNet-18-depthwise/net_dw_thin/photo/train_refinedet_1026.log.train")
test_log = pd.read_csv("/data_1/deep_learning_layer/layer/Resnet18/net/ResNet-18-depthwise/net_dw_thin/photo/train_refinedet_1026.log.test")
_, ax1 = plt.subplots()
ax1.set_title("train loss and test loss")
ax1.plot(train_log["NumIters"], train_log["loss"], alpha=0.5)
ax1.plot(test_log["NumIters"], test_log["loss"], 'g')
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
plt.legend(loc='upper left')
ax2 = ax1.twinx()
ax2.plot(test_log["NumIters"], test_log["acc/top-1"], 'r')
ax2.plot(test_log["NumIters"], test_log["acc/top-5"], 'm')
ax2.set_ylabel('test accuracy')
plt.legend(loc='upper right')
plt.show()
print ('Done.')
其中綠色曲線爲測試的loss,藍色的柱形爲訓練的loss。