使用caffe自带的工具绘制loss函数曲线

xiaoxiao2021-02-28  111

由于最近使用caffe训练一个网络,学习了如何使用训练过程中生成的log来绘制loss函数曲线,主要用于观察所训练的网络是否收敛。 前提:安装完caffe后已经对pycaffe和matcaffe编译过了。 接下来从训练过程如何生成训练状态的日志(log)说明,直到绘制出loss函数的曲线。 Step1.对网络训练的脚本文件train.sh进行修改,加上生成log的语句。 使用vim打开train.sh,在末尾加上 tee out.log。

$HOME/net/caffe/build/tools/caffe train -solver=solver.txt - snapshot=$HOME/raid/iter_107600.solverstate -gpu 2 2>&1 | tee out.log

开始训练网络后,则在当前目录下生成了训练日志文件out.log。 *需要注意: ①以上的2>&1是Linux下的信息流输出控制语法,实验证明若去掉则会导致训练的loss等信息不记录。 ②out.log在生成之后需要使用caffe自带的python函数进行解析。

Step2.解析log文件,生成out.log.train和out.log.test文件。 这一步可以直接cd到caffe/tools/extra目录下调用parse_log.py函数进行解析,也可以把该目录下的parse_log.py,parse_log.sh, extract_seconds.py,plot_training_log.py.example这四个文件cp到当前目录之后进行解析。(去掉plot_training_log.py.example的.example) 解析语法:

python parse_log.py out.log ./

解析完成后会在./目录也就是当前目录生成两个文件,out.log.train和out.log.test。由于我cp了out.log并命名为trainlog.log,所以在上面的截图中看到的是trainlog.log.train和trainlog.log.test。

Step3.执行绘图脚本,生成loss曲线图(还可以生成accuracy)。 在执行脚本之前,需要根据训练设置修改脚本,用vim打开plot_training_log.py,对field_index进行修改,由于我的网络设置,将2与3调换了。

vim plot_training_log.py

对脚本进行修改,调换2和3后如下:

def create_field_index(): train_key = 'Train' test_key = 'Test' field_index = {train_key:{'Iters':0, 'Seconds':1, train_key + ' loss':3, train_key + ' learning rate':2}, test_key:{'Iters':0, 'Seconds':1, test_key + ' accuracy':2, test_key + ' loss':3}} fields = set() for data_file_type in field_index.keys(): fields = fields.union(set(field_index[data_file_type].keys())) fields = list(fields) fields.sort() return field_index, fields

另外,由于生成的.train和.test的第一行为说明字符(如下图),需要进行处理。 可以在trainlog.log.train和trainlog.log.test中使用#注释掉第一行,或者对脚本进行以下修改(一劳永逸的方法)。 修改前后对比: #修改前

#修改后 def load_data(data_file, field_idx0, field_idx1): data = [[], []] with open(data_file, 'r') as f: fdata = [line.strip() for line in f] for new_line in fdata[1:]: if new_line[0] != '#': fields = new_line.split(',') data[0].append(float(fields[field_idx0].strip())) data[1].append(float(fields[field_idx1].strip())) return data

使用以下语句执行绘图:

python plot_training_log.py 6 trainloss.png trainlog.log

说明:6表示曲线类型(caffe还支持其他类型,如下所示),trainloss.png表示绘制的图片名称。

Notes: 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

注:若使用putty连接工作站,则可以使用ftp服务(putty安装目录下的psftp.exe文件)进行上传下载生成的loss函数曲线图片。相关命令:cd改变远程目录、lcd改变本地目录、ls查看远程文件列表、put上传文件、get下载文件等命令。


转载请注明原文地址: https://www.6miu.com/read-41681.html

最新回复(0)