pytorch-lightningでログを可視化したい【機械学習】

pytorch lightningを使い始めました。

学習ループとか、もろもろラッピングしてもらえてとても便利なのですが、ログ(val_lossやval_accuracy)はどこに残っているのか?という部分が謎でした。

最近(1月)、pytorch lightningが0.6にバージョンアップしデフォルトでTensorBoardLoggerが使われているとのことなので、どんな風に使うかgithubのコードから見てみたいと思います。

 

まずはMNISTのサンプルスクリプトを動かす

 

サンプルスクリプトはこちらから持ってきます。

https://github.com/PyTorchLightning/pytorch-lightning

 

CoolSystemクラスを拝借します。

 

training_step , validation_end, test_end にtensorboad_logsとしてログを残す記述がされていますね。

学習を終えたら、ログを確認しに行きましょう!

 

lightning_logsフォルダを確認

一回学習を走らせるごとに、(デフォルトでは)同じ階層に lightning_ligs というフォルダができているはずです。

中はこのようになっています。

checkpointsフォルダには、今回の学習ループで、一番lossが小さくなったときのモデルのチェックポイント、ckptファイルが残っています。これを使ってチェックポイント時のモデルを再現することができます。

今回探していたログは、上から2番目の evemts.out.tfevents.~~ ファイルです。

こちらを開きましょう。

 

terminalで以下のように打ち込みます。

そうすると、localhost:6006の案内がでますので、ここから以下のようにログの確認ができます。

ログを残す場所やファイル名等の変更はできるようです。

https://pytorch-lightning.readthedocs.io/en/0.6.0/trainer.html こちらより)

 

ログを直接残したい

ただいちいちTensorboard開くのが面倒なので、ログ格納リストを追加してそこに放り込んでいこうかなと思います。

CoolSystemクラスを少し修正します。

埋もれてしまってわかりにくいですが、修正箇所は2点で

def __init__ 内にval_lossesを追加

def validation_end 内で  self.val_losses.append(avg_loss)

これで、モデルのインスタンス化の際に、ログを格納するリストを与えてあげればうまくいくはずです。

学習を終えて中を確認すると、tensor型で値がリストに入ります。

こちらを可視化します。

うまくいきました。

pandasのデータフレーム型に変換するときは、

・リスト→torch.tensor

・torch.tensor→numpy

に変える点だけ注意が必要です。

ということで、ログの可視化でした。ただ何かしらの実験管理ツールを利用するほうが絶対によさそうですので、そちらも調べてみよう。

最後まで読んでいただきありがとうございました。

 

追記:wandb でやってみました

【機械学習】PyTorch Lightningのログを実験管理ツールwandbで記録する