欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu16.04下Caffe绘制训练过程的loss和accuracy曲线

程序员文章站 2024-03-24 13:21:04
...

      在利用Caffe训练相应的网络模型后,往往需要绘制训练过程中的数据,这样可以更加直观地展示我们的实验结果,事实上,caffe自带了这样的小工具,当然你也可以自己写个代码,下面分别介绍这两种方法:

     (一)利用caffe自带工具

       (1)首先假设你生成的log文件名为train.log,利用你的~/caffe/tools/extra/parse_log.py来解析train.log文件,会生成两个文件,分别为:train.log.test、train.log.train。为了方便演示,这里将train.log文件拷贝到与~/caffe/tools/extra/parse_log.py相同的目录下,在该目录右键打开终端,执行以下命令即可(不要忘记了最后的“.”):

python parse_log_rs.py train.log .

注意:不要忘记了最后的“.”,代表的是你train.log.test、train.log.train文件的输出保存路径,这里的“.”代表的是当前目录,我的截图示例如下:

              ubuntu16.04下Caffe绘制训练过程的loss和accuracy曲线 

        (2)利用你的~/caffe/tools/extra/plot_training_log.py.example来绘制相应的loss和accuracy曲线,这里建议你生成该文件的一个拷贝,保留原始文件,新文件名字为plot_training_log.py。执行命令:

cp plot_training_log.py.example plot_training_log.py

           然后执行以下命令即可绘制相应曲线:

python plot_training_log.py 0 save.png train.log

    参数“save.png”代表你保存绘制图像的文件名,train.log就是你最初训练获得log文件,其中的“0”代表地是其中一种类型,事实上这里有8中模式,具体模式如下,你可以依次尝试:

    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  

如果你在运行上述代码出现了以下错误,直接执行以下安装命令即可:

sudo apt-get install python-tk
ubuntu16.04下Caffe绘制训练过程的loss和accuracy曲线

最终打开保存的图片save.png,如下所示:

ubuntu16.04下Caffe绘制训练过程的loss和accuracy曲线

     (二)自己写个小代码绘制曲线

       其实caffe提供的工具已经非常完整了,我们还可以进去代码结合自己的需求进行相应的修改。唯一的不足时,上述方法往往是单个曲线的绘制,如果你想把loos与accuracy曲线叠加在一个图上,就可以采用下面的代码来完成:

注意:第一步还是需要利用~/caffe/tools/extra/parse_log.py来解析train.log文件,生成两个文件,分别为:train.log.test、train.log.train

注意:你可以更该相应的参数名来绘制你想要的曲线,例如:

ax1.plot(train_log["NumIters"], train_log["loss"], 'r')   # 绘制训练迭代次数与loss曲线,可以选择文件中其它的参数绘制曲线

ax2.plot(test_log["NumIters"], test_log["accuary"], 'm')  # 绘制测试迭代次数与准确率曲线

plot_loss_accuracy.py

#-*-coding:utf-8-*-

import pandas as pd
import matplotlib.pyplot as plt

train_log = pd.read_csv("train.log.train")   # 你的文件名
test_log = pd.read_csv("train.log.test")     # 你的文件名

_, ax1 = plt.subplots()
ax1.set_title("train loss and test loss")    # 标题
# ax1.plot(train_log["NumIters"], train_log["loss"], alpha=0.5)
ax1.plot(train_log["NumIters"], train_log["loss"], 'r')   # 绘制训练迭代次数与loss曲线,可以选择文件中其它的参数绘制曲线
# ax1.plot(test_log["NumIters"], test_log["loss"], 'g')   # 绘制测试迭代次数与loss曲线
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
plt.legend(loc='upper left')

ax2 = ax1.twinx()
# ax2.plot(test_log["NumIters"], test_log["acc/top-1"], 'r')
# ax2.plot(test_log["NumIters"], test_log["acc/top-5"], 'm')
# ax2.plot(test_log["NumIters"], test_log["accuary"], 'r')
ax2.plot(test_log["NumIters"], test_log["accuary"], 'm')  # 绘制测试迭代次数与准确率曲线
ax2.set_ylabel('test accuracy')
plt.legend(loc='upper right')

plt.show()

print('Done.')

结果图为:

ubuntu16.04下Caffe绘制训练过程的loss和accuracy曲线