これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.

このページの通常のビューに戻る.

keras

Tools for integrating wandb with Keras.

Classes

class WandbCallback: WandbCallback は keras を wandb と自動的に統合します。

class WandbEvalCallback: モデル予測可視化のために Keras コールバックを作成するための抽象基底クラスです。

class WandbMetricsLogger: システムメトリクスを W&B へ送信するロガー。

class WandbModelCheckpoint: 定期的に Keras モデルまたはモデルの重みを保存するチェックポイント。

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 のサマリーメトリクスを設定します。「最良」は monitormode 属性によって定義されます。デフォルトでは、最小の 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_gradientsTrue の場合は必須です。
validation_data (タプル) model.fit に渡される形式 (X,y) と同じ形式です。wandb が可視化するデータセットです。設定されている場合、各エポックで wandb は少数の予測を行い、後で可視化するためにその結果を保存します。画像データを扱っている場合は、正しくログするために input_typeoutput_type を設定して下さい。
generator (ジェネレータ) wandb が可視化するための検証データを返すジェネレータ。このジェネレータは、タプル (X,y) を返す必要があります。wandb が特定のデータ例を可視化するには validate_data またはジェネレータが設定されている必要があります。画像データを扱っている場合は、正しくログするために input_typeoutput_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_indexesvalidation_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

ソースを見る

get_flops() -> float

tf.keras.Model または tf.keras.Sequential モデルの推論モードでの FLOPS [GFLOPs] を計算します。

内部では tf.compat.v1.profiler を使用しています。

set_model

ソースを見る

set_model(
    model
)

set_params

ソースを見る

set_params(
    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_truthadd_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_beginon_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_model(
    model
)

set_params

set_params(
    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_epochmodel.fit に渡してトレーニングを再開し、かつ学習率スケジューラを使用している場合、initial_global_stepWandbMetricsLogger に渡すことを確認してください。initial_global_stepstep_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_model(
    model
)

set_params

set_params(
    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 で渡される)が埋め込まれます。たとえば、filepathmodel-{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 に対しては maxval_loss に対しては min など。
save_freq (Union[SaveStrategy, int]) epoch または整数。'epoch' を使用する場合、コールバックは各エポックの後にモデルを保存します。整数を使用する場合、コールバックはこのバッチ数の終わりにモデルを保存します。val_accval_loss などの検証メトリクスを監視する場合、save_freq は「epoch」に設定する必要があります。これらのメトリクスはエポックの終わりにのみ利用可能だからです。
initial_value_threshold (Optional[float]) 監視されるメトリクスの浮動小数点数の初期「最良」値。
属性

メソッド

set_model

set_model(
    model
)

set_params

set_params(
    params
)