Caffe-Windows下画loss与accuracy曲线

时间:2017-03-27 12:36 来源:武松娱乐整理 字体:[ ] 评论:
1、修改tools/extra/plot_training_log.py,这里面需要修改的东西太多了,我们分步讲解,可能代码优点乱,大家不要介意。 1.1、生成*****log.test,*****log.train两个文件 方法一:利用tools/extra/parse_log.py文件 [python]view plaincopy pythonparse_log.py****.logsave_path 第一个参数:我们的训练日志,后缀名必须是".log",其实这也不是必须的,我们可以修改plot_training_log.py中子函数 [python]view plaincopy defget_log_file_suffix(): return'.log'#可以返回其他后缀名 第二个参数:保存路径,执行上述命令后会生成两个文件****.log.test,****.log.train。 方法二:将生成这两个文件集成到plot_training_log.py中。我们首先看一下两个plot_training_log.py文件中的子函数 [python]view plaincopy defget_log_parsing_script(): dirname=os.path.dirname(os.path.abspath(inspect.getfile( inspect.currentframe()))) returndirname+'/parse_log.sh' 返回的是parse_log.sh脚本的路径,看来要调用这个脚本,但是我们知道在Windows下是无法使用shell脚本的。所以我们需要修改调用这个shell脚本的地方。就在下面这个子函数 [python]view plaincopy defplot_chart(chart_type,path_to_png,path_to_log_list): forpath_to_loginpath_to_log_list: #os.system('%s%s'%(get_log_parsing_script(),path_to_log)) ######################自己修改############################# train_dict_list,test_dict_list=parse_log.parse_log(path_to_log) parse_log.save_csv_files(path_to_log,'./',train_dict_list,test_dict_list) #####################记得要在前面导入parse_log模块 import parse_log######## data_file=get_data_file(chart_type,path_to_log) x_axis_field,y_axis_field=get_field_descriptions(chart_type) x,y=get_field_indices(x_axis_field,y_axis_field) data=load_data(data_file,x,y) ##TODO:moresystematiccolorcycleforlines color=[random.random(),random.random(),random.random()] label=get_data_label(path_to_log) linewidth=0.75 ##Iftheretoomanydatapoints,donotusemarker. ##use_marker=False use_marker=True ifnotuse_marker: plt.plot(data[0],data[1],label=label,color=color, linewidth=linewidth) else: ok=False ##SomemarkersthrowValueError:Unrecognizedmarkerstyle whilenotok: try: marker=random_marker() plt.plot(data[0],data[1],label=label,color=color, marker=marker,linewidth=linewidth) ok=True except: pass legend_loc=get_legend_loc(chart_type) plt.legend(loc=legend_loc,ncol=1)#ajustncoltofitthespace plt.title(get_chart_type_description(chart_type)) plt.xlabel(x_axis_field) plt.ylabel(y_axis_field) plt.savefig(path_to_png) plt.show() 看到了第一句就是调用shell脚本,我们将其注释掉,然后利用parse_log.py文件中的子函数来实现相同的功能。 2.2、Caffe提供的工具可以生成8种不同的曲线
\
1.3、修改子函数creat_field_index() [python]view plaincopy defcreate_field_index(): train_key='Train' test_key='Test' field_index={train_key:{'Iters':0,'Seconds':1,train_key+'learningrate':2, train_key+'loss':3},#根据自己的**.log.train文件修改了2和3的顺序,注意只是调换顺序,不要修改key字符 test_key:{'Iters':0,'Seconds':1,'learningrate':2,test_key+'accuracy':3, test_key+'loss':4}}#自己增加test_key中learningrate fields=set() fordata_file_typeinfield_index.keys(): fields=fields.union(set(field_index[data_file_type].keys())) fields=list(fields) fields.sort() returnfield_index,fields 主要修改的地方就是field_index,这要根据你前面生成的****.log.test和****.log.train两个文件中第一行的单词的顺序修改字典对应顺序。我此处的修改是根据我的文件,切记一定要和你的文件核对,否则生成的曲线是不对的。我已经测试过8种曲线都能正确画出。 2.4、修改load_data() [python]view plaincopy defload_data(data_file,field_idx0,field_idx1): data=[[],[]] fr=open(data_file,'r') lines=fr.readlines() foriinrange(1,len(lines)): line=lines[i].strip() ifline[0]!='#': fields=line.split(',') data[0].append(float(fields[field_idx0].strip())) data[1].append(float(fields[field_idx1].strip())) fr.close() returndata 之所以修改这个函数,因为原函数是从****.log.test和****.log.train的第一行读取数据,但是第一行是单词如法转换成浮点数,必须从第二行开始读取数据。 OK,到此为止,需要修改的地方基本上已经没有了。 需要注意两点: 1、保存的图片默认后缀名.png,如果你想保存成其他后缀名,可修改下面的代码 [python]view plaincopy path_to_png=sys.argv[2] ifnotpath_to_png.endswith('.png'):#此处检查后缀名,可以改成你想要的后缀 print'Pathmustendswithpng'%path_to_png 2、Windows命令格式 [python]view plaincopy pythonplot_training_log.py7train.pngINFO2016-12-09T12-54-26.log
结果如下:
\
是不是很酷!
顶一下(0) 踩一下(0)
Top_arrow
武松娱乐注册