概要
Chainer のログは本体に同梱されている LogReport extention を使うと JSON 形式で出力されますが、Fluentd などのログコレクターと連携させる場合は JSONL 形式で出力されたほうが便利です。今回は Chainer のログを JSONL 形式で出力する extention を作成しました。
使い方
- インストール
$ pip install chainer-jsonl-report
- 学習コード
from chainer_jsonl_report import JsonlReport
...略...
trainer.extend(JsonlReport())
trainer.extend(extensions.PrintReport(
['epoch', 'iteration', 'main/loss', 'validation/main/loss',
'main/accuracy', 'validation/main/accuracy', 'elapsed_time'],
log_report='JsonlReport',
))
LogReport の代わりに JsonlReport を extend し、PrintReport の引数に log_report='JsonlReport'
を指定すれば完了です。全体のコードはこちらにあります。実行すると以下の様な1行1JSONなログが出力されます。
{"main/loss": 0.3365242703319358, "main/accuracy": 0.9054337686567164, "validation/main/loss": 0.15602408988472027, "validation/main/accuracy": 0.9532238924050633, "epoch": 1, "iteration": 469, "elapsed_time": 3.0503302490105852}
{"main/loss": 0.13408539906493636, "main/accuracy": 0.9597381396588486, "validation/main/loss": 0.11228864842766448, "validation/main/accuracy": 0.9659810126582279, "epoch": 2, "iteration": 938, "elapsed_time": 6.065310915000737}
{"main/loss": 0.09253230937587809, "main/accuracy": 0.9720815565031983, "validation/main/loss": 0.08980113636890921, "validation/main/accuracy": 0.9706289556962026, "epoch": 3, "iteration": 1407, "elapsed_time": 9.113151438999921}
{"main/loss": 0.06868528947234154, "main/accuracy": 0.9787660256410257, "validation/main/loss": 0.08547733464761625, "validation/main/accuracy": 0.9716178797468354, "epoch": 4, "iteration": 1875, "elapsed_time": 12.126692335004918}
{"main/loss": 0.054074254724929834, "main/accuracy": 0.9828924573560768, "validation/main/loss": 0.07506902210555877, "validation/main/accuracy": 0.9773536392405063, "epoch": 5, "iteration": 2344, "elapsed_time": 15.149620360985864}
...
利用例
MNIST の学習結果を Fluentd + Elasticsearch + Kibana で可視化してみました。全体のコードはこちらにあります。
-
実行方法
docker-compose でまとめているのでdocker-compose up
した後にブラウザで実行しているマシンの6501番ポートにアクセスするだけです。
※ちなみに可視化に関しては学習に関する操作(スナップショットや学習停止など)も組み込まれている ChainerUI があるのでそちらを使ったほうが良いと思います。
まとめ
- Trainer のログを JSONL 形式で出力する extension を作成しました
- 利用例として、ログコレクターの Fluentd と連携させて elasticsearch にログを保存し、kibanaで可視化しました