【问题标题】:Monitor training/validation process in Caffe监控 Caffe 中的培训/验证过程
【发布时间】:2015-11-05 19:52:36
【问题描述】:

我正在训练用于对图像进行分类的 Caffe 参考模型。 我的工作要求我通过在整个训练集和分别具有 100K 和 50K 图像的验证集上每 1000 次迭代后绘制模型的准确度图来监控训练过程。 现在,我采取天真的方法,每 1000 次迭代后制作快照,运行读取原始 JPEG 图像并转发到网络并输出预测标签的 C++ 分类代码。但是,这在我的机器上花费了太多时间(使用 Geforce GTX 560 Ti)

有什么更快的方法可以让我在训练集和验证集上获得快照模型的准确度图?

我正在考虑使用 LMDB 格式而不是原始图像。但是,我找不到有关使用 LMDB 格式在 C++ 中进行分类的文档/代码。

【问题讨论】:

  • 您为什么不使用DIGITS 来帮助您进行培训?它具有内置的监控功能。

标签: c++ classification deep-learning caffe conv-neural-network


【解决方案1】:

1) 您可以使用NVIDIA-DIGITS 应用程序来监控您的网络。它们提供了一个 GUI,包括数据集准备、模型选择和学习曲线可视化。此外,他们使用允许 multi-GPU training 的 caffe 分发。

2) 或者,您可以简单地使用 caffe 中的日志解析器。

/pathtocaffe/build/tools/caffe train --solver=solver.prototxt 2>&1 | tee lenet_train.log

这允许您将火车日志保存到“lenet_train.log”中。然后通过使用:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log .

您将训练日志解析为两个 csv 文件,其中包含训练和测试损失。然后,您可以使用以下 python 脚本绘制它们

import pandas as pd
from matplotlib import *
from matplotlib.pyplot import *

train_log = pd.read_csv("./lenet_train.log.train")
test_log = pd.read_csv("./lenet_train.log.test")
_, ax1 = subplots(figsize=(15, 10))
ax2 = ax1.twinx()
ax1.plot(train_log["NumIters"], train_log["loss"], alpha=0.4)
ax1.plot(test_log["NumIters"], test_log["loss"], 'g')
ax2.plot(test_log["NumIters"], test_log["acc"], 'r')
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
ax2.set_ylabel('test accuracy')
savefig("./train_test_image.png") #save image as png

【讨论】:

  • 感谢您的详细解答。 DIGITS 似乎是一个很好的工具,我将在接下来的实验中使用它
  • 我有点糊涂了,你说的“test_log”实际上是“验证”还是真正的“测试”?
  • 这是一个验证。但在 caffe 中,“val”和“test”似乎是同一个意思。
  • 缺少导入
  • 嗨,贾,我试过你的方法,但是当我尝试解析它时,我得到“不写 .\mylog.log.train;没有要写的行”。任何想法为什么?
【解决方案2】:

每次您尝试训练某些内容时,Caffe 都会创建日志,并且它位于 tmp 文件夹(Linux 和 Windows)中。
我还在 python 中编写了一个绘图脚本,您可以轻松地使用它来可视化您的损失/准确性。
只需将带有.log 扩展名的训练日志放在脚本旁边,然后双击它。 您也可以使用命令提示符,但为了便于使用,在执行时它会加载它可以在当前目录中找到的所有日志 (*.log)。 它还显示了前 4 个精度以及它们达到的精度。

你可以在这里找到它:https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b

【讨论】:

    【解决方案3】:
    python /pathtocaffe/tools/extra/parse_log.py lenet_train.log
    

    命令产生以下错误:

    usage: parse_log.py [-h] [--verbose] [--delimiter DELIMITER]
                    logfile_path output_dir
    parse_log.py: error: too few arguments
    

    解决方案:

    为了成功执行“parse_log.py”命令,我们应该传递两个参数:

    1. 日志文件
    2. 输出目录路径

    所以正确的命令如下:

    python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir
    

    【讨论】:

    • 添加一个“.” (一个不带婴儿床的点)在命令末尾再试一次
    猜你喜欢
    • 2017-08-31
    • 2016-02-27
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多