何かしらのモデルを学習する際に、ロスは順調に下がっているのか等、その経過を逐次確認したいと思うことがよくあります。色々選択肢がありますが、僕が試してきた方法と、その中で良いと思った方法を紹介します。結論はタイトルの通りです。
tensorboardX: https://github.com/lanpa/tensorboard-pytorch
選択肢
まずはじめに、これまで僕がしてきたことは、
- 学習中には確認しない(学習終了後に、ロス、正解率の推移をmatplotlibなどでプロットする)
-
print(loss)
のようなログをイテレーションごとに吐いて、目で推移を確認する - (jupyter notebookの場合)bokehのNotebook Handles機能を使って、イテレーション毎にロスのグラフをアップロードしていく
- 適当なステップ毎に、例えば画像の生成例等を保存していく
- tensorboard_logger を使って、tensorboardようにログを吐いて、tensorboardをつかって確認する
- tensorboardX を使って、tensorboardようにログを吐いて、tensorboardをつかって確認する
それぞれ実際に試してみた感想を書いていきます。
- 学習に何日もかかる場合にはとても非効率なのでダメです。数分から十分くらいで終わる場合は、これでもよいでしょう。
- グラフのほうがわかりやすいので、グラフにしましょう
- Notebookを使っている場合、かつ学習に何日も時間がかからない場合は、これでもよいでしょう。ただし、グラフの要素毎にアップデート処理を書かないといけないので、グラフが増えてくると大変だと個人的には思いました。
- 便利です。あとで複数の画像をまとめてgifにしたりすることもできます。しかし、ロスのようなストリーミングデータの保存には向きません
- とてもよく、数カ月とくに不満なく使っていました。しかし、tensorboardの機能の一部しか使えません。例えば、画像や音声をログに吐くことができません
- 5の問題点を解決してくれるもので、ロスはもちろん、画像や音声、embedding、グラフを出力することもできます。最高でした。
まとめ
https://github.com/lanpa/tensorboard-pytorch がとてもよかったので、PyTorchユーザーの方は学習の過程をモニタリングするのに使ってみてはどうでしょうか
おまけ
実際に試していないので確証はないのですが、コードを読んでいたら chainerの名前があった ので、chainerでも使えるのかもしれません