Caffe—根据log日志绘制loss曲线和accuracy

本文介绍了在Ubuntu16.04环境下,使用Caffe自带工具parse_log.sh、extract_seconds.py和plot_training_log.py.example来解析并绘制训练日志中的loss和accuracy曲线。针对Windows用户,提供了相应解决方案和第三方工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文在此只讲述Ubuntu16.04
caffe训练日志绘制loss曲线以及accuracy
如果是windows平台直接跳转文末

caffe中其实已经自带了这样的小工具

  • caffe-master/tools/extra/parse_log.sh
  • caffe-master/tools/extra/extract_seconds.py
  • caffe-master/tools/extra/plot_training_log.py.example

拷贝以上文件到当前log目录下(训练日志保存目录下)
并将plot_training_log.py.example改名为plot_training_log.py

第一步保存日志文件,用重定向即可:

  • 如果您已有log文件忽略,没有请将训练日志保存(可参考如下代码)
    $TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log

第二步直接绘制:

  • 注意,采用的是Python2.7不是Python3
python plot_training_log.py 2 testloss.png out.log
  • Notes: 上述代码中的参数2-是选择画哪种类型的图片,具体数字是代表哪个类型可以查看帮助信息看到:
    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

读者根据自身需求进行修改参数
这里写图片描述

当遇到如下情况

onds.py: 权限不够
paste: aux4.txt: 没有那个文件或目录
rm: 无法删除'aux4.txt': 没有那个文件或目录
/home/th/data/TH/CARlog/parse_log.sh: 
行 47: /home/th/data/TH/CARlog/extract_seconds.py: 权限不够
paste: aux3.txt: 没有那个文件或目录
rm: 无法删除'aux3.txt': 没有那个文件或目录

因为aux4.txt是由aux3.txt来的,没有aux3.txt就无法生成aux4.txt
也就报错说不能pasterm aux4.txt
在extract_seconds.py中也是通过寻找sovling来确定开始时间的。
如果单独用parse_log.py生成日志文件,不会报aux4.txt的错误,但会报extract_seconds.py的错

parse_log.shline28-31 修改两行代码:

grep '] Solving ' $1 > aux3.txt
# grep 'Testing net' $1 >> aux3.txt
grep 'Train net' $1 >> aux3.txt

同时需要修改plot_training_log.py文件中的load_data()函数
之所以修改这个函数,因为原函数是从 .log.test.log.train 的第一行读取数据
但是第一行是单词如法转换成浮点数,必须从第二行开始读取数据。

load_data()修改代码如下:

def load_data(data_file, field_idx0, field_idx1):
    data = [[], []]
    with open(data_file, 'r') as f:
        for line in f:
            line = line.strip()
            if line[0] != '#':
                line=','.join(filter(lambda x: x, line.split(' ')))
                print line
                fields = line.split(',')
                print fields
                data[0].append(float(fields[field_idx0].strip())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值