在 Caffe 中监控 training/validation 个进程
Monitor training/validation process in Caffe
我正在训练用于图像分类的 Caffe 参考模型。
我的工作要求我通过在整个训练集和验证集(分别具有 100K 和 50K 图像)上每 1000 次迭代后绘制模型精度图来监控训练过程。
现在,我采用天真的方法,每 1000 次迭代后制作快照,运行 读取原始 JPEG 图像并转发到网络并输出预测标签的 C++ 分类代码。但是,这在我的机器上花费了太多时间(使用 Geforce GTX 560 Ti)
有什么更快的方法可以让我在训练集和验证集上获得快照模型的准确性图表?
我正在考虑使用 LMDB 格式而不是原始图像。但是,我找不到 documentation/code 关于使用 LMDB 格式在 C++ 中进行分类的信息。
1) 您可以使用 NVIDIA-DIGITS app to monitor your networks. They provide a GUI including dataset preparation, model selection, and learning curve visualization. More, they use a caffe distribution allowing multi-GPU training.
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
每次您尝试训练时,Caffe 都会创建日志,它位于 tmp 文件夹中(linux 和 windows)。
我还在 python 中编写了一个绘图脚本,您可以轻松使用它来可视化您的 loss/accuracy.
只需将带有 .log
扩展名的训练日志放在脚本旁边,然后双击它。
您也可以使用命令提示符,但为了便于使用,在执行时它会加载它可以在当前目录中找到的所有日志 (*.log)。
它还显示了前 4 个准确度以及它们达到的准确度。
你可以在这里找到它:https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b
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"命令,我们应该传递两个参数:
- 日志文件
- 输出目录路径
所以正确的命令如下:
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir
我正在训练用于图像分类的 Caffe 参考模型。 我的工作要求我通过在整个训练集和验证集(分别具有 100K 和 50K 图像)上每 1000 次迭代后绘制模型精度图来监控训练过程。 现在,我采用天真的方法,每 1000 次迭代后制作快照,运行 读取原始 JPEG 图像并转发到网络并输出预测标签的 C++ 分类代码。但是,这在我的机器上花费了太多时间(使用 Geforce GTX 560 Ti)
有什么更快的方法可以让我在训练集和验证集上获得快照模型的准确性图表?
我正在考虑使用 LMDB 格式而不是原始图像。但是,我找不到 documentation/code 关于使用 LMDB 格式在 C++ 中进行分类的信息。
1) 您可以使用 NVIDIA-DIGITS app to monitor your networks. They provide a GUI including dataset preparation, model selection, and learning curve visualization. More, they use a caffe distribution allowing multi-GPU training.
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
每次您尝试训练时,Caffe 都会创建日志,它位于 tmp 文件夹中(linux 和 windows)。
我还在 python 中编写了一个绘图脚本,您可以轻松使用它来可视化您的 loss/accuracy.
只需将带有 .log
扩展名的训练日志放在脚本旁边,然后双击它。
您也可以使用命令提示符,但为了便于使用,在执行时它会加载它可以在当前目录中找到的所有日志 (*.log)。
它还显示了前 4 个准确度以及它们达到的准确度。
你可以在这里找到它:https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b
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"命令,我们应该传递两个参数:
- 日志文件
- 输出目录路径
所以正确的命令如下:
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir