阶段三——结果绘图:
调用caffe提供的工具读取模型训练的log,绘制结果图的时候,由于caffe提供的plot_training_log.py是按照python2的语法写的,所以应该:
1、将print语法改为python3.x带圆括号的那种,
2、将xrange改为range
除此之外,还会出现以下几个坑(不完全统计)。
坑3.1
报错:如图
位置:plot_training_log.py
原因1:问题在于plot_training_log.py中的return dirname + '/parse_log.sh'。这里的.sh文件是linux系统的shell命令,在windows上不能运行。
解决办法:将plot_training_log.py中的return dirname + '/parse_log.sh'改为return dirname + '/parse_log.py'。并将XX\caffe-windows\tools\extra中的parse_log.py拷贝到当前工作目录下。
坑3.2
报错:即使填好了坑3.1,依然会有以下报错:
原因:plot_traing_log.py中的os.system('%s %s' % (get_log_parsing_script(), path_to_log))生成的命令是一种在linux命令格式,不适用与windows
解决办法1:将plot_traing_log.py中的os.system('%s %s' % (get_log_parsing_script(), path_to_log))改为os.system('python %s %s %s'%("parse_log.py", "mnist_Lenet_train_test.log" ,"./"))
解决办法2:注释掉plot_training_log.py中的
os.system('%s %s' % (get_log_parsing_script(), path_to_log)),改为在cmd窗口手动执行 python parse_log.py mnist_Lenet_train_test.log ./
坑3.3
报错:TypeError: 'dict_keys' object does not support indexing
位置:plot_training_log.py 中的return lmarkers.keys()[idx]
原因:python2.x中,dict.keys()返回一个列表,在python3.x中,dict.keys()返回一个dict_keys对象,比起列表,对象的行为更像是set,所以不支持索引
解决方法:将markers.keys()[idx]改为 list(markers.keys())[idx]
参考:http://blog.csdn.net/chienchia/article/details/40887831
坑3.4
报错:如图
原因:log.test文件中同一行相邻元素之间是用逗号而不是空格来分开的。原版plot_training_log.py
中的fields = line.split( )无法相邻元素分开。
解决办法:将fields = line.split( )改为fields = line.split(',')
坑3.5
报错:
原因:如图,.log.test文件有空格行,当读取到空格行的时候就发生string index out of range
解决办法:在spyder中打开mnist_Lenet_train_test.log.text
手动删除空格行,或修改以下代码跳过空格行。