1 - Wandb コールバック
WandbCallback
は、keras と wandb を自動的に統合します。
WandbCallback(
monitor="val_loss", verbose=0, mode="auto", save_weights_only=(False),
log_weights=(False), log_gradients=(False), save_model=(True),
training_data=None, validation_data=None, labels=None, predictions=36,
generator=None, input_type=None, output_type=None, log_evaluation=(False),
validation_steps=None, class_colors=None, log_batch_frequency=None,
log_best_prefix="best_", save_graph=(True), validation_indexes=None,
validation_row_processor=None, prediction_row_processor=None,
infer_missing_processors=(True), log_evaluation_frequency=0,
compute_flops=(False), **kwargs
)
例:
model.fit(
X_train,
y_train,
validation_data=(X_test, y_test),
callbacks=[WandbCallback()],
)
WandbCallback
は、keras によって収集されたメトリクスからの履歴データを自動的にログします: 損失および keras_model.compile()
に渡されたもの。
WandbCallback
は、「最良」のトレーニングステップに関連付けられた run のサマリーメトリクスを設定します。「最良」は monitor
と mode
属性によって定義されます。デフォルトでは、最小の val_loss
を持つエポックです。WandbCallback
はデフォルトで最良の epoch
に関連するモデルを保存します。
WandbCallback
は、勾配およびパラメータのヒストグラムをオプションでログすることができます。
WandbCallback
は、wandb によるトレーニングおよび検証データの可視化のためにデータを保存することができます。
引数 |
|
monitor |
(str) 監視するメトリックの名前。デフォルトは val_loss です。 |
mode |
(str) {auto , min , max } のいずれかです。 min - 監視が最小化されたときにモデルを保存する max - 監視が最大化されたときにモデルを保存する auto - モデルを保存するタイミングを推測しようとする(デフォルト)。 |
save_model |
True - 監視がすべての以前のエポックを上回ったときにモデルを保存する False - モデルを保存しない |
save_graph |
(ブール) True の場合、モデルのグラフを wandb に保存する(デフォルトは True)。 |
save_weights_only |
(ブール) True の場合、モデルの重みのみが保存されます (model.save_weights(filepath) )、そうでなければ、完全なモデルが保存されます (model.save(filepath) )。 |
log_weights |
(ブール) True の場合、モデルのレイヤの重みのヒストグラムを保存します。 |
log_gradients |
(ブール) True の場合、トレーニング勾配のヒストグラムをログします。 |
training_data |
(タプル) model.fit に渡される形式 (X,y) と同じ形式です。勾配を計算するために必要です - log_gradients が True の場合は必須です。 |
validation_data |
(タプル) model.fit に渡される形式 (X,y) と同じ形式です。wandb が可視化するデータセットです。設定されている場合、各エポックで wandb は少数の予測を行い、後で可視化するためにその結果を保存します。画像データを扱っている場合は、正しくログするために input_type と output_type を設定して下さい。 |
generator |
(ジェネレータ) wandb が可視化するための検証データを返すジェネレータ。このジェネレータは、タプル (X,y) を返す必要があります。wandb が特定のデータ例を可視化するには validate_data またはジェネレータが設定されている必要があります。画像データを扱っている場合は、正しくログするために input_type と output_type を設定してください。 |
validation_steps |
(int) validation_data がジェネレータの場合、完全な検証セットのためにジェネレータを実行するステップ数。 |
labels |
(リスト) あなたのデータを wandb で可視化する場合、このラベルのリストは、数値出力を理解可能な文字列に変換します。多クラス分類器を構築している場合に役立ちます。バイナリ分類器を作成している場合は、2つのラベル [“false のラベル”, “true のラベル”] のリストを渡すことができます。 validate_data とジェネレータが両方 false の場合は何もしません。 |
predictions |
(int) 各エポックで可視化のために行う予測の数、最大は 100。 |
input_type |
(文字列) 可視化を支援するためのモデルの入力のタイプ。次のいずれかです: (image , images , segmentation_mask , auto )。 |
output_type |
(文字列) 可視化を支援するためのモデルの出力のタイプ。次のいずれかです: (image , images , segmentation_mask , label )。 |
log_evaluation |
(ブール) True の場合、各エポックで検証データとモデルの予測を含む Table を保存します。詳細は validation_indexes 、validation_row_processor 、および output_row_processor を参照してください。 |
class_colors |
([float, float, float]) 入力または出力がセグメンテーションマスクの場合、各クラスの rgb タプル(範囲は 0-1)を含む配列。 |
log_batch_frequency |
(整数) None の場合、コールバックは毎エポックでログを記録します。整数に設定すると、コールバックは log_batch_frequency バッチごとにトレーニングメトリクスをログします。 |
log_best_prefix |
(文字列) None の場合、追加のサマリーメトリクスは保存されません。文字列に設定すると、監視されているメトリックとエポックがこの値で前置され、サマリーメトリクスとして保存されます。 |
validation_indexes |
([wandb.data_types._TableLinkMixin]) 各検証例に関連付けるインデックスキーの順序付きリスト。 log_evaluation が True で validation_indexes が提供されている場合、検証データの Table は作成されず、各予測は TableLinkMixin によって表される行と関連付けられます。これらのキーを取得する最も一般的な方法は Table.get_index() を使用することで、行キーのリストが返されます。 |
validation_row_processor |
(Callable) 検証データに適用する関数で、一般的にはデータを可視化するために使用されます。この関数は ndx (int) と row (dict) を受け取ります。あなたのモデルが単一の入力を持っている場合、row["input"] は行の入力データです。それ以外の場合は、入力スロットの名前に基づいてキー化されます。あなたの fit 関数が単一のターゲットを取る場合、row["target"] は行のターゲットデータです。それ以外の場合は、出力スロットの名前に基づいてキー化されます。例えば、入力データが単一の ndarray であり、データを画像として可視化したい場合、lambda ndx, row: {"img": wandb.Image(row["input"])} をプロセッサとして提供できます。 log_evaluation が False の場合または validation_indexes が存在する場合は無視されます。 |
output_row_processor |
(Callable) validation_row_processor と同様ですが、モデルの出力に適用されます。row["output"] はモデル出力の結果を含みます。 |
infer_missing_processors |
(bool) validation_row_processor および output_row_processor を欠けている場合に推測するかどうかを決定します。デフォルトは True です。labels が提供されている場合、適切な場合に分類タイプのプロセッサを推測しようとします。 |
log_evaluation_frequency |
(int) 評価結果がログされる頻度を決定します。デフォルトは 0 で(トレーニングの最後のみ)、1 に設定すると毎エポック、2 に設定すると隔エポックでログします。 log_evaluation が False の場合、効果はありません。 |
compute_flops |
(bool) あなたの Keras Sequential または Functional モデルの FLOPs を GigaFLOPs 単位で計算します。 |
メソッド
get_flops
ソースを見る
tf.keras.Model または tf.keras.Sequential モデルの推論モードでの FLOPS [GFLOPs] を計算します。
内部では tf.compat.v1.profiler を使用しています。
set_model
ソースを見る
set_params
ソースを見る
2 - WandbEvalCallback
Keras コールバックをモデル予測の可視化用に構築するための抽象基本クラス。
WandbEvalCallback(
data_table_columns: List[str],
pred_table_columns: List[str],
*args,
**kwargs
) -> None
エポック終了時 (on_epoch_end
) にモデル予測を可視化するためのコールバックを構築し、分類、オブジェクト検出、セグメンテーションなどのタスク用に model.fit()
に渡すことができます。
これを使用するには、このベースコールバッククラスから継承し、add_ground_truth
と add_model_prediction
メソッドを実装します。
この基本クラスは以下のことを処理します:
- 正解をログするための
data_table
と予測のための pred_table
を初期化します。
data_table
にアップロードされたデータは pred_table
の参照として使用されます。これはメモリフットプリントを削減するためです。data_table_ref
は参照されたデータにアクセスするために使用できるリストです。以下の例を見て方法を確認してください。
- W&B にテーブルを W&B Artifacts としてログします。
- 新しい
pred_table
はエイリアスとともに新しいバージョンとしてログされます。
例:
class WandbClfEvalCallback(WandbEvalCallback):
def __init__(self, validation_data, data_table_columns, pred_table_columns):
super().__init__(data_table_columns, pred_table_columns)
self.x = validation_data[0]
self.y = validation_data[1]
def add_ground_truth(self):
for idx, (image, label) in enumerate(zip(self.x, self.y)):
self.data_table.add_data(idx, wandb.Image(image), label)
def add_model_predictions(self, epoch):
preds = self.model.predict(self.x, verbose=0)
preds = tf.argmax(preds, axis=-1)
data_table_ref = self.data_table_ref
table_idxs = data_table_ref.get_index()
for idx in table_idxs:
pred = preds[idx]
self.pred_table.add_data(
epoch,
data_table_ref.data[idx][0],
data_table_ref.data[idx][1],
data_table_ref.data[idx][2],
pred,
)
model.fit(
x,
y,
epochs=2,
validation_data=(x, y),
callbacks=[
WandbClfEvalCallback(
validation_data=(x, y),
data_table_columns=["idx", "image", "label"],
pred_table_columns=["epoch", "idx", "image", "label", "pred"],
)
],
)
より詳細に制御したい場合は、on_train_begin
と on_epoch_end
メソッドをオーバーライドできます。N バッチごとにサンプルをログしたい場合は、on_train_batch_end
メソッドを実装することができます。
メソッド
add_ground_truth
ソースを表示
@abc.abstractmethod
add_ground_truth(
logs: Optional[Dict[str, float]] = None
) -> None
正解データを data_table
に追加します。
このメソッドを使用して、init_data_table
メソッドを使用して初期化された data_table
にバリデーション/トレーニングデータを追加するロジックを書きます。
例:
for idx, data in enumerate(dataloader):
self.data_table.add_data(idx, data)
このメソッドは、on_train_begin
または同等のフックで呼び出されます。
add_model_predictions
ソースを表示
@abc.abstractmethod
add_model_predictions(
epoch: int,
logs: Optional[Dict[str, float]] = None
) -> None
モデルからの予測を pred_table
に追加します。
このメソッドを使用して、init_pred_table
メソッドを使用して初期化された pred_table
にバリデーション/トレーニングデータのモデル予測を追加するロジックを書きます。
例:
# dataloader がサンプルをシャッフルしていないと仮定します。
for idx, data in enumerate(dataloader):
preds = model.predict(data)
self.pred_table.add_data(
self.data_table_ref.data[idx][0],
self.data_table_ref.data[idx][1],
preds,
)
このメソッドは、on_epoch_end
または同等のフックで呼び出されます。
init_data_table
ソースを表示
init_data_table(
column_names: List[str]
) -> None
バリデーションデータ用の W&B テーブルを初期化します。
このメソッドを on_train_begin
または同等のフックで呼び出します。これに続いて、テーブルに行または列ごとにデータを追加します。
引数 |
|
column_names |
(list) W&B テーブルのカラム名です。 |
init_pred_table
ソースを表示
init_pred_table(
column_names: List[str]
) -> None
モデルの評価用の W&B テーブルを初期化します。
このメソッドを on_epoch_end
または同等のフックで呼び出します。これに続いて、テーブルに行または列ごとにデータを追加します。
引数 |
|
column_names |
(list) W&B テーブルのカラム名です。 |
log_data_table
ソースを表示
log_data_table(
name: str = "val",
type: str = "dataset",
table_name: str = "val_data"
) -> None
data_table
を W&B Artifacts としてログし、use_artifact
を呼び出します。
これにより、評価テーブルが既にアップロードされたデータ(画像、テキスト、スカラーなど)の参照を再アップロードせずに使用できます。
引数 |
|
name |
(str) このアーティファクトの人間が読める名前で、UIでこのアーティファクトを識別したり、use_artifact呼び出しで参照したりする方法です。(デフォルトは ‘val’) |
type |
(str) アーティファクトのタイプで、アーティファクトを整理し区別するために使用されます。(デフォルトは ‘dataset’) |
table_name |
(str) UIで表示されるテーブルの名前です。(デフォルトは ‘val_data’) |
log_pred_table
ソースを表示
log_pred_table(
type: str = "evaluation",
table_name: str = "eval_data",
aliases: Optional[List[str]] = None
) -> None
モデルの評価用の W&B テーブルをログします。
テーブルは新しいバージョンを作成しながら複数回ログされます。これを使用して、異なる間隔でモデルをインタラクティブに比較します。
引数 |
|
type |
(str) アーティファクトのタイプで、アーティファクトを整理し区別するために使用されます。(デフォルトは ’evaluation’) |
table_name |
(str) UIで表示されるテーブルの名前です。(デフォルトは ’eval_data’) |
aliases |
(List[str]) 予測テーブルのエイリアスのリストです。 |
set_model
set_params
3 - WandbMetricsLogger
システムメトリクスを W&B に送信するロガー。
WandbMetricsLogger(
log_freq: Union[LogStrategy, int] = "epoch",
initial_global_step: int = 0,
*args,
**kwargs
) -> None
WandbMetricsLogger
は、コールバックメソッドが引数として取る logs
辞書を自動的に wandb にログします。
このコールバックは、次の情報を W&B の run ページに自動的にログします:
- システム (CPU/GPU/TPU) メトリクス、
model.compile
で定義されたトレーニングと検証メトリクス、
- 学習率(固定値または学習率スケジューラのどちらも)
注釈:
initial_epoch
を model.fit
に渡してトレーニングを再開し、かつ学習率スケジューラを使用している場合、initial_global_step
を WandbMetricsLogger
に渡すことを確認してください。initial_global_step
は step_size * initial_step
であり、ここで step_size
はエポックごとのトレーニングステップ数です。step_size
はトレーニングデータセットの基数とバッチサイズの積として計算できます。
引数 |
|
log_freq |
(“epoch”, “batch”, または int) “epoch” の場合、各エポックの終了時にメトリクスをログします。“batch” の場合、各バッチの終了時にメトリクスをログします。整数の場合、そのバッチ数の終了時にメトリクスをログします。デフォルトは “epoch” です。 |
initial_global_step |
(int) ある initial_epoch からトレーニングを再開し、学習率スケジューラを使用している場合に、学習率を正しくログするためにこの引数を使用します。これは step_size * initial_step として計算できます。デフォルトは 0 です。 |
メソッド
set_model
set_params
4 - WandbModelCheckpoint
定期的に Keras モデルまたはモデルの重みを保存するチェックポイント。
WandbModelCheckpoint(
filepath: StrPath,
monitor: str = "val_loss",
verbose: int = 0,
save_best_only: bool = (False),
save_weights_only: bool = (False),
mode: Mode = "auto",
save_freq: Union[SaveStrategy, int] = "epoch",
initial_value_threshold: Optional[float] = None,
**kwargs
) -> None
保存された重みは wandb.Artifact
として W&B にアップロードされます。
このコールバックは tf.keras.callbacks.ModelCheckpoint
からサブクラス化されているため、チェックポイントのロジックは親コールバックによって処理されます。詳細はこちらで学べます: https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ModelCheckpoint
このコールバックは model.fit()
を使用してトレーニングを行い、一定の間隔でモデルや重みを(チェックポイントファイルに)保存するために使用します。モデルのチェックポイントは W&B Artifacts としてログされます。詳細はこちらで学べます:
https://docs.wandb.ai/guides/artifacts
このコールバックは次の機能を提供します:
- 「モニター」に基づいて「最良のパフォーマンス」を達成したモデルを保存します。
- パフォーマンスに関係なく、各エポックの終わりにモデルを保存します。
- エポックの終わり、または一定数のトレーニングバッチ後にモデルを保存します。
- モデルの重みのみを保存するか、全体のモデルを保存します。
- モデルを SavedModel 形式か
.h5
形式で保存します。
引数 |
|
filepath |
(Union[str, os.PathLike]) モデルファイルを保存するパス。filepath には名前付きのフォーマット オプションを含めることができ、これには epoch の値および logs のキー(on_epoch_end で渡される)が埋め込まれます。たとえば、filepath が model-{epoch:02d}-{val_loss:.2f} の場合、モデルのチェックポイントはエポック番号と検証損失とともにファイル名で保存されます。 |
monitor |
(str) 監視するメトリクスの名前。デフォルトは “val_loss”。 |
verbose |
(int) 冗長モード、0 または 1。モード 0 は静かで、モード 1 はコールバックがアクションを取るときにメッセージを表示します。 |
save_best_only |
(bool) save_best_only=True の場合、モデルが「最良」と見なされたときのみ保存され、監視される量に基づいて最新の最良モデルは上書きされません。filepath に {epoch} などのフォーマット オプションが含まれていない場合、filepath はローカルで新しいより良いモデルによって上書きされます。アーティファクトとしてログされたモデルは、依然として正しい monitor と関連付けられます。アーティファクトは継続的にアップロードされ、新しい最良のモデルが見つかると個別にバージョン管理されます。 |
save_weights_only |
(bool) True の場合、モデルの重みのみが保存されます。 |
mode |
(Mode) {‘auto’, ‘min’, ‘max’} のいずれか。val_acc に対しては max 、val_loss に対しては min など。 |
save_freq |
(Union[SaveStrategy, int]) epoch または整数。'epoch' を使用する場合、コールバックは各エポックの後にモデルを保存します。整数を使用する場合、コールバックはこのバッチ数の終わりにモデルを保存します。val_acc や val_loss などの検証メトリクスを監視する場合、save_freq は「epoch」に設定する必要があります。これらのメトリクスはエポックの終わりにのみ利用可能だからです。 |
initial_value_threshold |
(Optional[float]) 監視されるメトリクスの浮動小数点数の初期「最良」値。 |
メソッド
set_model
set_params