前言:我们在训练网络的时候,网络训练完毕后,需要可视化训练过程中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。