本文在此只讲述Ubuntu16.04下
caffe训练日志绘制loss曲线以及accuracy
如果是windows平台直接跳转文末
caffe中其实已经自带了这样的小工具
- caffe-master/tools/extra/parse_log.sh
- caffe-master/tools/extra/extract_seconds.py
- caffe-master/tools/extra/plot_training_log.py.example
拷贝以上文件到当前log目录下(训练日志保存目录下)
并将plot_training_log.py.example改名为plot_training_log.py
第一步保存日志文件,用重定向即可:
如果您已有log文件忽略,没有请将训练日志保存(可参考如下代码)
$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log
第二步直接绘制:
- 注意,采用的是Python2.7不是Python3
python plot_training_log.py 2 testloss.png out.log
- Notes: 上述代码中的参数2-是选择画哪种类型的图片,具体数字是代表哪个类型可以查看帮助信息看到:
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
读者根据自身需求进行修改参数
当遇到如下情况
onds.py: 权限不够
paste: aux4.txt: 没有那个文件或目录
rm: 无法删除'aux4.txt': 没有那个文件或目录
/home/th/data/TH/CARlog/parse_log.sh:
行 47: /home/th/data/TH/CARlog/extract_seconds.py: 权限不够
paste: aux3.txt: 没有那个文件或目录
rm: 无法删除'aux3.txt': 没有那个文件或目录
因为aux4.txt是由aux3.txt来的,没有aux3.txt就无法生成aux4.txt;
也就报错说不能paste和rm aux4.txt。
在extract_seconds.py中也是通过寻找sovling来确定开始时间的。
如果单独用parse_log.py生成日志文件,不会报aux4.txt的错误,但会报extract_seconds.py的错
在parse_log.sh
中 line28-31 修改两行代码:
grep '] Solving ' $1 > aux3.txt
# grep 'Testing net' $1 >> aux3.txt
grep 'Train net' $1 >> aux3.txt
同时需要修改plot_training_log.py
文件中的load_data()
函数
之所以修改这个函数,因为原函数是从 .log.test 和 .log.train 的第一行读取数据
但是第一行是单词如法转换成浮点数,必须从第二行开始读取数据。
load_data()
修改代码如下:
def load_data(data_file, field_idx0, field_idx1):
data = [[], []]
with open(data_file, 'r') as f:
for line in f:
line = line.strip()
if line[0] != '#':
line=','.join(filter(lambda x: x, line.split(' ')))
print line
fields = line.split(',')
print fields
data[0].append(float(fields[field_idx0].strip())