监控Caffe的培训/验证过程

Duc*_*ong 16 c++ classification deep-learning caffe conv-neural-network

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

有没有更快的方法可以在训练集和验证集上获得快照模型的准确性图表?

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

Jia*_* Li 25

1)您可以使用NVIDIA-DIGITS应用程序监控您的网络.它们提供GUI,包括数据集准备,模型选择和学习曲线可视化.更多,他们使用caffe发行版,允许多GPU培训.

2)或者,你可以简单地在caffe中使用log-parser.

/pathtocaffe/build/tools/caffe train --solver=solver.prototxt 2>&1 | tee lenet_train.log
Run Code Online (Sandbox Code Playgroud)

这允许您将列车日志保存到"lenet_train.log".然后使用:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log .
Run Code Online (Sandbox Code Playgroud)

您将您的火车日志解析为两个包含火车和测试损失的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
Run Code Online (Sandbox Code Playgroud)