メインコンテンツへスキップ
W&B Keras コールバックを使用すると、実験を管理し、モデル チェックポイントをログし、トレーニング中のモデルの予測を可視化できます。このインテグレーションを使用すると、トレーニング ループを書き換えることなく、Keras のトレーニング ワークフローに実験管理とモデルのバージョン管理を追加できます。 Keras コールバックは、Python SDK バージョン 0.13.4 以降で wandb.integration.keras モジュールから利用できます。W&B Keras インテグレーションでは、次のコールバックを提供しています。
  • WandbMetricsLogger: 実験管理 にはこのコールバックを使用します。トレーニングおよび検証のメトリクスに加えて、システム メトリクスも W&B にログします。
  • WandbModelCheckpoint: モデル チェックポイントを W&B Artifacts にログするには、このコールバックを使用します。
  • WandbEvalCallback: このベース コールバックは、モデルの予測を W&B Tables にログし、インタラクティブに可視化できるようにします。

Keras インテグレーションのインストールとインポート

W&B の最新バージョンをインストールします。
Kerasインテグレーションを使用するには、wandb.integration.keras から必須クラスをインポートします。
以下のセクションでは、各コールバックについてコード例とともに詳しく説明します。

WandbMetricsLogger で実験を管理する

wandb.integration.keras.WandbMetricsLogger() は、on_epoch_endon_batch_end などのコールバック メソッドが引数として受け取る Keras の logs 辞書をログします。 以下の抜粋例では、Keras の workflow で WandbMetricsLogger() を使用する方法を示します。まず、使用したい optimizer、損失関数、メトリクスを指定してモデルをコンパイルします。次に、wandb.init() を使用して W&B run を初期化します。最後に、WandbMetricsLogger() コールバックを model.fit() に渡します。
前の例では、各エポックの終了時に、lossaccuracytop@5_accuracy などのトレーニングおよび検証メトリクスを W&B にログします。

WandbMetricsLogger リファレンス

WandbModelCheckpoint を使用してモデルをチェックポイントする

WandbModelCheckpoint コールバックを使用すると、Keras モデル (SavedModel 形式) またはモデルの重みを定期的に保存し、モデルのバージョン管理のために wandb.Artifact として W&B にアップロードできます。 このコールバックは tf.keras.callbacks.ModelCheckpoint() のサブクラスであるため、チェックポイントのロジックは親コールバックによって処理されます。 このコールバックでは、次を保存できます。
  • monitor に基づいて最高のパフォーマンスを達成したモデル
  • パフォーマンスに関係なく、各エポックの終了時のモデル
  • エポックの終了時、または一定数のトレーニングバッチごとのモデル
  • モデルの重みのみ、またはモデル全体
  • SavedModel 形式または .h5 形式のモデル
このコールバックは WandbMetricsLogger() と併用してください。

WandbModelCheckpoint リファレンス

N エポックごとにチェックポイントをログする

デフォルトでは (save_freq="epoch") 、コールバックは各エポックの後にチェックポイントを作成し、それを artifact としてアップロードします。特定のバッチ数ごとにチェックポイントを作成するには、save_freq を整数に設定します。N エポックごとにチェックポイントを作成するには、train データローダーの要素数を計算して、それを save_freq に渡します。

TPU アーキテクチャでチェックポイントを効率的にログする

TPU でチェックポイントを作成する際に、UnimplementedError: File system scheme '[local]' not implemented というエラーメッセージが表示されることがあります。これは、モデルディレクトリ (filepath) にはクラウドストレージのバケットパス (gs://bucket-name/...) を使用する必要があり、さらにそのバケットに TPU サーバーからアクセスできなければならないためです。一方、W&B ではチェックポイント作成にローカルパスを使用し、その後 W&B が artifact としてアップロードします。

WandbEvalCallback を使用してモデルの予測を可視化する

WandbEvalCallback() は、主にモデル予測、次いでデータセットの可視化を目的とした Keras コールバックを構築するための抽象基底クラスです。 この抽象コールバックは、データセットやタスクから独立しています。これを使用するには、基底コールバッククラス WandbEvalCallback() を継承し、add_ground_truth メソッドと add_model_prediction メソッドを実装します。 WandbEvalCallback() は、次の機能を提供するユーティリティクラスです。
  • データと予測用の wandb.Table() インスタンスを作成する。
  • データと予測の表を wandb.Artifact() としてログする。
  • on_train_begin でデータ表をログする。
  • on_epoch_end で予測表をログする。
次の例では、画像分類タスクで WandbClfEvalCallback を使用します。このコールバックは、検証データ (data_table) を W&B にログし、推論を実行して、各エポックの終了時に予測結果 (pred_table) を W&B にログします。

WandbEvalCallback リファレンス

メモリ使用量の詳細

W&B は on_train_begin メソッドの呼び出し時に data_table をログします。W&B がこれを W&B Artifact としてアップロードすると、この表への参照を取得でき、data_table_ref クラス変数を使ってアクセスできます。data_table_ref は 2 次元リストで、self.data_table_ref[idx][n] のようにインデックスで指定できます。ここで、idx は行番号、n は列番号です。使用方法については、次の例を参照してください。

コールバックをカスタマイズする

データと予測がいつログされるかをより細かく制御するには、デフォルトのコールバック method をオーバーライドできます。より細かく制御するには、on_train_begin または on_epoch_end の method をオーバーライドします。N バッチごとにサンプルをログしたい場合は、on_train_batch_end method を実装できます。
WandbEvalCallback を継承してモデルの予測可視化用コールバックを実装していて、不明な点や修正が必要な点があれば、issue を作成してください。

レガシー WandbCallback

WandbCallback は従来のオールインワン コールバックです。新しい project では、前のセクションで説明した専用のコールバック (WandbMetricsLoggerWandbModelCheckpointWandbEvalCallback) を使用してください。W&B ライブラリの WandbCallback() クラスを使用すると、model.fit() でトラッキングされるすべてのメトリクスと損失値を保存できます。
短い動画 1分以内で始める Keras と W&B を視聴できます。 より詳しい動画は、Keras と W&B を統合するをご覧ください。Colab Jupyter Notebookも確認できます。 追加のサンプルスクリプトについては、W&B example repoを参照してください。これには、Fashion MNIST の例と、それによって生成される W&B ダッシュボード が含まれます。 WandbCallback クラスは、ログ設定オプションをサポートします。たとえば、監視するメトリクスの指定、重みと勾配のトラッキング、training_datavalidation_data に対する予測のログなどです。 詳細については、keras.WandbCallback のリファレンスドキュメントを参照してください。 WandbCallback:
  • Keras が収集したすべてのメトリクスの履歴データをログします。これには、損失や keras_model.compile() に渡されたすべての項目が含まれます。
  • monitor 属性と mode 属性で定義される「最良」のトレーニング step に関連付けられた run の summary メトリクスを設定します。デフォルトでは、これは val_loss が最小のエポックです。WandbCallback はデフォルトで、最良の epoch に対応するモデルを保存します。
  • 必要に応じて、勾配とパラメーターのヒストグラムをログします。
  • 必要に応じて、wandb が可視化できるようにトレーニングデータと検証データを保存します。

WandbCallback リファレンス

よくある質問

wandbKeras のマルチプロセッシングを使用する

use_multiprocessing=True を設定すると、次のエラーが発生することがあります。
これを回避するには、次のようにします。
  1. Sequence クラスの構築時に、wandb.init(group='...') を追加します。
  2. main では、if __name__ == "__main__": を使用していることを確認し、スクリプトの残りのロジックはその中に記述します。