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

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

Custom charts

W&B のプロジェクトでカスタムグラフを作成できます。任意のデータのテーブルを記録し、必要な方法で正確に可視化します。Vega の機能を使用して、フォント、色、ツールチップの詳細を制御します。

vega.github.io/vega でサポートされているグラフ

仕組み

  1. データ の ログ: スクリプトから、config とサマリーデータを記録します。
  2. グラフのカスタマイズ: GraphQL クエリでログに記録されたデータを取得します。強力な可視化文法である Vega を使用して、クエリの結果を可視化します。
  3. グラフのログ: wandb.plot_table() を使用して、スクリプトから独自のプリセットを呼び出します。

期待されるデータが表示されない場合は、探している列が選択された runs に記録されていない可能性があります。グラフを保存し、runs テーブルに戻り、 のアイコンを使用して選択した runs を確認します。

スクリプトからグラフをログ

組み込みプリセット

W&B には、スクリプトから直接ログに記録できる多数の組み込みグラフプリセットがあります。これには、折れ線グラフ、散布図、棒グラフ、ヒストグラム、PR曲線、ROC曲線が含まれます。

wandb.plot.line()

任意の軸 x と y 上の接続された順序付けられた点 (x,y) のリストであるカスタム折れ線グラフをログに記録します。

data = [[x, y] for (x, y) in zip(x_values, y_values)]
table = wandb.Table(data=data, columns=["x", "y"])
wandb.log(
    {
        "my_custom_plot_id": wandb.plot.line(
            table, "x", "y", title="Custom Y vs X Line Plot"
        )
    }
)

折れ線グラフは、任意の2つの次元で曲線をログに記録します。2つの値のリストを互いにプロットする場合、リスト内の値の数は完全に一致する必要があります (たとえば、各ポイントには x と y が必要です)。

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

wandb.plot.scatter()

カスタム散布図 (任意の軸 x と y のペア上の点のリスト (x, y)) をログに記録します。

data = [[x, y] for (x, y) in zip(class_x_prediction_scores, class_y_prediction_scores)]
table = wandb.Table(data=data, columns=["class_x", "class_y"])
wandb.log({"my_custom_id": wandb.plot.scatter(table, "class_x", "class_y")})

これを使用して、任意の2つの次元で散布点をログに記録できます。2つの値のリストを互いにプロットする場合、リスト内の値の数は完全に一致する必要があることに注意してください (たとえば、各ポイントには x と y が必要です)。

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

wandb.plot.bar()

カスタム棒グラフ (ラベル付きの値のリストを棒として) を数行でネイティブにログに記録します。

data = [[label, val] for (label, val) in zip(labels, values)]
table = wandb.Table(data=data, columns=["label", "value"])
wandb.log(
    {
        "my_bar_chart_id": wandb.plot.bar(
            table, "label", "value", title="Custom Bar Chart"
        )
    }
)

これを使用して、任意の棒グラフをログに記録できます。リスト内のラベルと値の数は完全に一致する必要があることに注意してください (たとえば、各データポイントには両方が必要です)。

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

wandb.plot.histogram()

カスタムヒストグラム (値のソートされたリストを、発生のカウント/頻度でビンに分類) を数行でネイティブにログに記録します。予測信頼度スコア (scores) のリストがあり、その分布を可視化するとします。

data = [[s] for s in scores]
table = wandb.Table(data=data, columns=["scores"])
wandb.log({"my_histogram": wandb.plot.histogram(table, "scores", title=None)})

これを使用して、任意のヒストグラムをログに記録できます。data はリストのリストであり、行と列の2D配列をサポートすることを目的としています。

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

wandb.plot.pr_curve()

適合率-再現率曲線 を1行で作成します。

plot = wandb.plot.pr_curve(ground_truth, predictions, labels=None, classes_to_plot=None)

wandb.log({"pr": plot})

コードが以下にアクセスできる場合は、いつでもこれをログに記録できます。

  • 例のセットに対するモデルの予測スコア (predictions)
  • これらの例に対応する正解ラベル (ground_truth)
  • (オプション) ラベル/クラス名のリスト (labels=["cat", "dog", "bird"...] (ラベルインデックス0がcat、1 = dog、2 = birdなどを意味する場合))
  • (オプション) プロットで可視化するラベルのサブセット (リスト形式のまま)

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

wandb.plot.roc_curve()

ROC曲線 を1行で作成します。

plot = wandb.plot.roc_curve(
    ground_truth, predictions, labels=None, classes_to_plot=None
)

wandb.log({"roc": plot})

コードが以下にアクセスできる場合は、いつでもこれをログに記録できます。

  • 例のセットに対するモデルの予測スコア (predictions)
  • これらの例に対応する正解ラベル (ground_truth)
  • (オプション) ラベル/クラス名のリスト (labels=["cat", "dog", "bird"...] (ラベルインデックス0がcat、1 = dog、2 = birdなどを意味する場合))
  • (オプション) プロットで可視化するこれらのラベルのサブセット (リスト形式のまま)

レポートの例 を参照するか、Google Colabノートブックの例 をお試しください。

カスタムプリセット

組み込みプリセットを調整するか、新しいプリセットを作成して、グラフを保存します。グラフIDを使用して、スクリプトからそのカスタムプリセットに直接データをログに記録します。Google Colabノートブックの例 をお試しください。

# プロットする列を含むテーブルを作成します
table = wandb.Table(data=data, columns=["step", "height"])

# テーブルの列からグラフのフィールドへのマッピング
fields = {"x": "step", "value": "height"}

# テーブルを使用して、新しいカスタムグラフプリセットを作成します
# 独自の保存されたグラフプリセットを使用するには、vega_spec_name を変更します
my_custom_chart = wandb.plot_table(
    vega_spec_name="carey/new_chart",
    data_table=table,
    fields=fields,
)

データの ログ

スクリプトから次のデータ型をログに記録し、カスタムグラフで使用できます。

  • Config: experiment の初期設定 (独立変数)。これには、トレーニングの開始時に wandb.config のキーとしてログに記録した名前付きフィールドが含まれます。例: wandb.config.learning_rate = 0.0001
  • サマリー: トレーニング中にログに記録された単一の値 (結果または従属変数)。例: wandb.log({"val_acc" : 0.8})wandb.log() を介してトレーニング中にこのキーに複数回書き込むと、サマリーはそのキーの最終値に設定されます。
  • 履歴: ログに記録されたスカラーの完全な時系列は、history フィールドを介してクエリで使用できます
  • summaryTable: 複数の値のリストをログに記録する必要がある場合は、wandb.Table() を使用してそのデータを保存し、カスタム パネルでクエリを実行します。
  • historyTable: 履歴データを確認する必要がある場合は、カスタムグラフ パネルで historyTable をクエリします。wandb.Table() を呼び出すか、カスタムグラフをログに記録するたびに、そのステップの履歴に新しいテーブルが作成されます。

カスタムテーブルをログする方法

wandb.Table() を使用して、データを2D配列としてログに記録します。通常、このテーブルの各行は1つのデータポイントを表し、各列はプロットする各データポイントの関連フィールド/次元を示します。カスタム パネルを構成すると、テーブル全体が wandb.log() (custom_data_table below) に渡される名前付きキーを介してアクセスできるようになり、個々のフィールドは列名 (xy、および z) を介してアクセスできるようになります。 experiment 全体で複数のタイムステップでテーブルをログに記録できます。各テーブルの最大サイズは10,000行です。Google Colab の例 をお試しください。

# データのカスタムテーブルをログ
my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
wandb.log(
    {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
)

グラフのカスタマイズ

新しいカスタムグラフを追加して開始し、クエリを編集して表示されている runs からデータを選択します。クエリは GraphQL を使用して、runs の config、サマリー、および履歴フィールドからデータをフェッチします。

新しいカスタムグラフを追加し、クエリを編集します

カスタム可視化

右上隅の グラフ を選択して、デフォルトのプリセットから開始します。次に、グラフフィールド を選択して、クエリから取得しているデータをグラフの対応するフィールドにマッピングします。

次の画像は、メトリクスを選択し、それを下の棒グラフフィールドにマッピングする方法の例を示しています。

プロジェクトの runs 全体で精度を示すカスタム棒グラフの作成

Vega を編集する方法

パネルの上部にある 編集 をクリックして、Vega 編集モードに移動します。ここでは、UI でインタラクティブなグラフを作成する Vega 仕様 を定義できます。グラフのあらゆる側面を変更できます。たとえば、タイトルを変更したり、別の配色を選択したり、曲線を接続された線としてではなく一連の点として表示したりできます。また、Vega 変換を使用して値の配列をヒストグラムにビン化するなど、データ自体に変更を加えることもできます。パネルプレビューはインタラクティブに更新されるため、Vega 仕様またはクエリを編集するときの変更の効果を確認できます。Vega のドキュメントとチュートリアル を参照してください。

フィールド参照

W&B からグラフにデータをプルするには、Vega 仕様の任意の場所に "${field:<field-name>}" 形式のテンプレート文字列を追加します。これにより、右側の グラフフィールド 領域にドロップダウンが作成され、ユーザーはクエリ結果の列を選択して Vega にマッピングできます。

フィールドのデフォルト値を設定するには、次の構文を使用します: "${field:<field-name>:<placeholder text>}"

グラフプリセットの保存

モーダルの下部にあるボタンを使用して、特定の可視化パネルに変更を適用します。または、Vega 仕様を保存して、プロジェクトの他の場所で使用することもできます。再利用可能なグラフ定義を保存するには、Vega エディターの上部にある 名前を付けて保存 をクリックし、プリセットに名前を付けます。

記事とガイド

  1. W&B 機械学習 可視化 IDE
  2. カスタムグラフを使用した NLP 注意ベース モデルの可視化
  3. カスタムグラフを使用した勾配フローに対する注意の影響の可視化
  4. 任意の曲線をログ

一般的なユースケース

  • エラーバー付きのカスタム棒グラフ
  • カスタム x-y 座標を必要とするモデル検証メトリクスを表示する (適合率-再現率曲線など)
  • 2つの異なるモデル/ experiment からのデータ分布をヒストグラムとしてオーバーレイする
  • トレーニング中の複数のポイントでのスナップショットを介してメトリクスの変化を表示する
  • W&B でまだ利用できない独自の可視化を作成する (そして、うまくいけばそれを世界と共有する)

1 - Tutorial: Use custom charts

W&B UI でカスタムチャート機能を使用する方法のチュートリアル

カスタムチャートを使用すると、パネルにロードするデータとその可視化を制御できます。

1. データを W&B にログ記録する

まず、スクリプトにデータをログ記録します。トレーニングの開始時に設定された単一のポイント(ハイパーパラメータなど)には、wandb.config を使用します。時間の経過に伴う複数のポイントには、wandb.log() を使用し、wandb.Table() を使用してカスタム 2D 配列をログ記録します。ログに記録されるキーごとに最大 10,000 個のデータポイントをログに記録することをお勧めします。

# データのカスタムテーブルをログ記録する
my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
wandb.log(
  {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
)

クイックなサンプルノートブックを試してデータテーブルをログに記録してください。次のステップでは、カスタムチャートを設定します。結果として得られるチャートがライブ Reportでどのように見えるかを確認してください。

2. クエリを作成する

可視化するデータをログに記録したら、プロジェクトページに移動し、**+**ボタンをクリックして新しいパネルを追加し、カスタムチャートを選択します。この Workspaceで一緒に操作できます。

設定する準備ができた、新しい空のカスタムチャート

クエリを追加する

  1. 「summary」をクリックし、「historyTable」を選択して、run の履歴からデータを取得する新しいクエリを設定します。
  2. wandb.Table() をログに記録したキーを入力します。上記のコードスニペットでは、my_custom_table でした。サンプルノートブックでは、キーは pr_curveroc_curve です。

Vega フィールドを設定する

クエリがこれらの列をロードするようになったので、Vega フィールドのドロップダウンメニューで選択するオプションとして使用できます。

クエリ結果から列をプルして Vega フィールドを設定する
  • x 軸: runSets_historyTable_r (再現率)
  • y 軸: runSets_historyTable_p (精度)
  • 色: runSets_historyTable_c (クラスラベル)

3. チャートをカスタマイズする

見た目はかなり良いですが、散布図から折れ線グラフに切り替えたいと思います。「編集」をクリックして、この組み込みチャートの Vega 仕様を変更します。この Workspaceで一緒に操作できます。

Vega 仕様を更新して、可視化をカスタマイズしました。

  • プロット、凡例、x 軸、および y 軸のタイトルを追加します(各フィールドの「title」を設定します)。
  • 「mark」の値を「point」から「line」に変更します。
  • 使用されていない「size」フィールドを削除します。

これをプリセットとして保存して、このプロジェクトの他の場所で使用できるようにするには、ページの上部にある「名前を付けて保存」をクリックします。結果は次のようになり、ROC 曲線が表示されます。

ボーナス: 複合ヒストグラム

ヒストグラムは、数値分布を可視化して、より大きなデータセットを理解するのに役立ちます。複合ヒストグラムは、同じビンに複数の分布を表示し、異なるモデル間、またはモデル内の異なるクラス間で、2 つ以上のメトリクスを比較できます。運転シーンでオブジェクトを検出するセマンティックセグメンテーションモデルの場合、精度と intersection over union (IOU) の最適化の効果を比較したり、異なるモデルが車(データ内の大きく一般的な領域)と交通標識(はるかに小さく、一般的でない領域)をどの程度検出できるかを知りたい場合があります。デモ Colabでは、10 種類の生物のクラスのうち 2 つの信頼度スコアを比較できます。

カスタム複合ヒストグラムパネルの独自のバージョンを作成するには:

  1. Workspace または Report で新しいカスタムチャートパネルを作成します(「カスタムチャート」可視化を追加することによって)。右上にある「編集」ボタンをクリックして、組み込みのパネルタイプから Vega 仕様を変更します。
  2. その組み込みの Vega 仕様を、Vega の複合ヒストグラムの MVP コードに置き換えます。メインタイトル、軸タイトル、入力ドメイン、およびその他の詳細を、この Vega 仕様で直接Vega 構文を使用して変更できます(色を変更したり、3 番目のヒストグラムを追加したりすることもできます:)
  3. 右側のクエリを変更して、wandb ログから正しいデータをロードします。フィールド summaryTable を追加し、対応する tableKeyclass_scores に設定して、run によってログに記録された wandb.Table をフェッチします。これにより、class_scores としてログに記録された wandb.Table の列を使用して、ドロップダウンメニューから 2 つのヒストグラムビンセット(red_binsblue_bins)を設定できます。私の例では、赤いビンの動物クラスの予測スコアと、青いビンの植物の予測スコアを選択しました。
  4. プレビューレンダリングに表示されるプロットに満足するまで、Vega 仕様とクエリの変更を続けることができます。完了したら、上部の「名前を付けて保存」をクリックし、カスタムプロットに名前を付けて再利用できるようにします。次に、「パネルライブラリから適用」をクリックして、プロットを完了します。

これは、非常に簡単な実験からの結果がどのように見えるかです。1 エポックでわずか 1000 個のサンプルでトレーニングすると、ほとんどの画像が植物ではないと非常に確信しており、どの画像が動物である可能性があるかについては非常に不確かなモデルが生成されます。