使用Caffe自带的tools来产生loss和accuracy曲线
举例说明:
本人训练时,使用的文件如下:
[ trainsh->solve.py->solver.prototxt->train_val.prototxt ]
1. 训练过程中保存日志
执行如下命令:
bash ./train.sh 2>&1 |tee logs/train.log
将会在logs文件夹下生成train.log 的日志文件
注意: 分析日志文件发现,训练过程中每display一次,会保存一次日志
2. 创建绘制曲线文件夹myshow及复制相关文件
创建绘制曲线文件夹myshow
把你的caffe目录下的 /tools/extra/ 目录下的
extract_seconds.py
parse_log.sh
plot_training_log.py.example
parse_log.py (非必须)
复制到myshow目录下,再把训练得到的日志文件train.log文件复制到myshow目录下.
caffe的 /tools/extra/ 目录:
myshow目录:
3. 修改文件
3-1. 修改parse_log.sh文件:
#第29行的内容修改
#grep '] Solving ' $1 > aux3.txt
grep 'net.cpp:' $1 > aux3.txt
#第40行的内容修改
#grep '] Solving ' $1 > aux.txt
grep 'net.cpp:' $1 > aux.txt
3-2. 修改extract_seconds.py文件:
#第38行修改
#if line.find('Solving') != -1:
if line.find('Initializing') != -1:
3-3. 解析log文件
./parse_log.sh train.log ./
执行上述命令,即可成功解析log,并生成2个文件: .test和.train,如下所示:
3-4. 执行命令,可视化曲线:
./plot_training_log.py.example 2 loss.png train.log
注意:
说明:
举例说明:
./plot_training_log.py.example 5 loss.png train.log
可视化结果:
4. 遇到的错误总结
4-1. 未对caffe自带的绘图文件(
extract_seconds.py
parse_log.sh
plot_training_log.py.example
)进行修改,直接执行log解析,出现如下错误:
$ ./parse_log.sh train.log ./
Traceback (most recent call last):
File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 64, in <module>
extract_seconds(sys.argv[1], sys.argv[2])
File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 49, in extract_seconds
assert start_datetime, 'Start time not found'
AssertionError: Start time not found
paste: aux4.txt: No such file or directory
rm: cannot remove 'aux4.txt': No such file or directory
Traceback (most recent call last):
File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 64, in <module>
extract_seconds(sys.argv[1], sys.argv[2])
File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 49, in extract_seconds
assert start_datetime, 'Start time not found'
AssertionError: Start time not found
paste: aux3.txt: No such file or directory
rm: cannot remove 'aux3.txt': No such file or directory
解决方法就是:
根据上述 3-1, 3-2 的方法进行修改
个人分析其原因:
我的train.log中使用的几个关键词有变化:
是'Initializing',不是'Solving'
是的 'net.cpp:' , 不是 '] Solving '
4-2. 我的train.log中没有记录任何有关 'Test net output #0' ,'Test net output #1' 的信息,所以在执行 ./plot_training_log.py.example 0 loss.png train.log 的时候出错.
$ ./plot_training_log.py.example 0 loss.png out.log
0 loss.png ['out.log']
Test accuracy vs. Iters
Test
['Test accuracy', 'Iters'] Iters Test accuracy
Test accuracy vs. Iters
Test
{'Iters': 0, 'Seconds': 1, 'Test loss': 3, 'Test accuracy': 2}
----1 out.log.test 0 2
Traceback (most recent call last):
File "./plot_training_log.py.example", line 198, in <module>
plot_chart(chart_type, path_to_png, path_to_logs)
File "./plot_training_log.py.example", line 122, in plot_chart
data = load_data(data_file, x, y)
File "./plot_training_log.py.example", line 92, in load_data
data[1].append(float(fields[field_idx1].strip()))
IndexError: list index out of range
同时发现,解析得到的.test文件内容也缺少一些内容:
有解析结果可知道,缺少了TestAccuracy ,TestLoss 两列内容.
所以,选择0-3的类型执行都会出错.(0-3的类型都是与Test(或.test文件的内容)有关的)
5. 参考链接
https://blog.csdn.net/sushiqian/article/details/78597024
https://www.cnblogs.com/txg198955/p/6185787.html
https://blog.csdn.net/qq745021926/article/details/78076979
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:caffe 训练过程中输出log日志,并可视化loss和accuracy曲线 - Python技术站