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

由于最近使用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下载文件等命令。


这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracelessLe

❀点个赞加个关注再走吧❀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值