web-dev-qa-db-ja.com

Caffeでのトレーニング/検証プロセスの監視

画像を分類するためのカフェ参照モデルをトレーニングしています。私の仕事では、トレーニングセット全体と検証セット(それぞれ100Kと50Kの画像)で1000回の反復ごとにモデルの精度のグラフを描画することにより、トレーニングプロセスを監視する必要があります。今、私は単純なアプローチをとり、1000回の反復ごとにスナップショットを作成し、生のJPEG画像を読み取ってネットに転送し、予測されたラベルを出力するC++分類コードを実行します。ただし、これは私のマシンでは時間がかかりすぎます(Geforce GTX 560 Tiを使用)

トレーニングセットと検証セットの両方でスナップショットモデルの精度のグラフを作成するためのより速い方法はありますか?

RAW画像の代わりにLMDB形式を使用することを考えていました。ただし、LMDB形式を使用してC++で分類を行うことに関するドキュメント/コードが見つかりません。

16
DucCuong

1) NVIDIA-DIGITS アプリを使用してネットワークを監視できます。これらは、データセットの準備、モデルの選択、学習曲線の視覚化を含むGUIを提供します。さらに、彼らは マルチGPUトレーニング を許可するカフェ分布を使用しています。

2)または、caffe内のlog-parserを使用することもできます。

/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 .

列車のログを解析して、列車とテストの損失を含む2つの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
25
Jia Li
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」コマンドを正常に実行するには、次の2つの引数を渡す必要があります。

  1. ログファイル
  2. 出力ディレクトリのパス

したがって、正しいコマンドは次のとおりです。

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir
1
Muhammad Farooq

Caffeは、何かをトレーニングしようとするたびにログを作成し、そのログはtmpフォルダー(linuxとwindowsの両方)にあります。
私もpythonにプロットスクリプトを書いて、損失/正確さを視覚化するために簡単に使用できます。
スクリプトの横に.log拡張子が付いたトレーニングログを配置し、それをダブルクリックするだけです。コマンドプロンプトも使用できますが、使いやすくするために、実行すると、現在のディレクトリにあるすべてのログ(* .log)が読み込まれます。また、上位4つの精度と達成された精度を示します。

ここで見つけることができます: https://Gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b

1
Rika