メインコンテンツへスキップ
W&B プロジェクトでカスタムチャートを作成できます。任意のデータを表としてログし、思いどおりに可視化できます。Vega を使えば、フォント、色、ツールチップの細部まで制御できます。
vega.github.io/vega でサポートされるチャート

仕組み

  1. データをログする: スクリプトから、設定 と summary データをログします。
  2. チャートをカスタマイズする: GraphQL クエリでログしたデータを取得します。Vega という強力な可視化記法を使って、クエリ結果を可視化します。
  3. チャートをログする: スクリプトから wandb.plot_table() を呼び出して、独自のプリセットを使用します。
PR 曲線と ROC 曲線
期待したデータが表示されない場合、探している列が選択した Runs にログされていない可能性があります。チャートを Save し、Runs table に戻って、eye アイコンで選択した Runs を確認してください。

スクリプトでチャートをログする

組み込みプリセット

W&B には、スクリプトから直接ログできる組み込みのチャートプリセットがいくつか用意されています。これには、折れ線グラフ、散布図、棒グラフ、ヒストグラム、PR 曲線、ROC 曲線が含まれます。
wandb.plot.line()カスタムの折れ線グラフをログします。これは、任意の x 軸と y 軸上の点 (x, y) を順番に結んだプロットです。
with wandb.init() as run:
  data = [[x, y] for (x, y) in zip(x_values, y_values)]
  table = wandb.Table(data=data, columns=["x", "y"])
  run.log(
      {
          "my_custom_plot_id": wandb.plot.line(
              table, "x", "y", title="Custom Y vs X Line Plot"
          )
      }
  )
折れ線グラフでは、任意の 2 つの次元に対する曲線をログできます。2 つの値のリストを対応させてプロットする場合は、各リストの値の数が完全に一致している必要があります (たとえば、各点には x と y の両方が必要です) 。
カスタム折れ線グラフ
レポートの例を見る または 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: 実験の初期設定 (独立変数) です。これには、トレーニング開始時に wandb.Run.config にキーとしてログした名前付きフィールドが含まれます。例: wandb.Run.config.learning_rate = 0.0001
  • Summary: トレーニング中にログされた単一の値 (結果または従属変数) です。たとえば、wandb.Run.log({"val_acc" : 0.8}) です。トレーニング中に wandb.Run.log() でこのキーに複数回書き込んだ場合、summary にはそのキーの最後の値が設定されます。
  • History: ログされたスカラーの完全な時系列は、history フィールドを通じてクエリできます
  • summaryTable: 複数の値のリストをログする必要がある場合は、wandb.Table() を使用してそのデータを保存し、その後カスタムパネルでクエリします。
  • historyTable: 履歴データを確認する必要がある場合は、カスタムチャートパネルで historyTable をクエリします。wandb.Table() を呼び出すかカスタムチャートをログするたびに、その step の history に新しい表が作成されます。

カスタム表をログする方法

wandb.Table() を使用して、データを二次元配列としてログします。通常、この表の各行は 1 つのデータポイントを表し、各列はプロットしたい各データポイントに関連するフィールドや次元を表します。カスタムパネルを設定すると、表全体には wandb.Run.log() に渡した名前付きキー (以下の custom_data_table) でアクセスでき、個々のフィールドには列名 (xyz) でアクセスできます。実験全体を通して、複数のタイムステップで表をログできます。各表の最大サイズは 10,000 行です。Google Colab で例を試す
with wandb.init() as run:
  # カスタムデータの表をログする
  my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
  run.log(
      {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
  )

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

まず新しいカスタムチャートを追加して開始し、その後クエリを編集して表示中のRunsからデータを選択します。クエリでは、GraphQLを使用して、Runs内のconfigsummaryhistoryフィールドからデータを取得します。
カスタムチャートの作成

カスタム可視化

右上の Chart を選択して、デフォルトのプリセットから始めます。次に、Chart fields を選択し、クエリで取得したデータをチャート内の対応するフィールドにマッピングします。 次の画像は、メトリクスを選択し、それを下の棒グラフのフィールドにマッピングする例を示しています。
カスタム棒グラフの作成

Vega の編集方法

パネル上部の Edit をクリックすると、Vega の編集モードに入ります。ここでは、UI 上でインタラクティブなチャートを作成するための Vega specification を定義できます。チャートのあらゆる要素を変更できます。たとえば、タイトルを変更したり、別の配色を選んだり、曲線を連続した線ではなく点の列として表示したりできます。また、Vega の transform を使って値の配列をビニングし、ヒストグラムにするなど、データ自体を変更することもできます。パネルのプレビューはインタラクティブに更新されるため、Vega spec やクエリを編集しながら、変更の効果を確認できます。Vega documentation and tutorials を参照してください。 フィールド参照 W&B からチャートにデータを取り込むには、"${field:<field-name>}" 形式のテンプレート文字列を Vega spec 内の任意の場所に追加します。これにより、右側の Chart Fields 領域にドロップダウンが作成され、Users はそれを使って Vega にマッピングするクエリ結果の列を選択できます。 フィールドのデフォルト値を設定するには、次の構文を使用します: "${field:<field-name>:<placeholder text>}"

チャートプリセットの保存

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

記事とガイド

  1. W&Bの機械学習可視化IDE
  2. カスタムチャートを使ってNLPのAttentionベースモデルを可視化する
  3. カスタムチャートを使ってAttentionが勾配フローに与える影響を可視化する
  4. 任意の曲線をログする

一般的なユースケース

  • 誤差バー付きの棒グラフをカスタマイズする
  • 独自の x-y 座標が必要なモデルの検証メトリクス (適合率-再現率曲線など) を表示する
  • 2 つの異なるモデル/実験のデータ分布をヒストグラムとして重ねて表示する
  • トレーニング中の複数の時点で取得したスナップショットを使って、メトリクスの変化を表示する
  • W&B ではまだ利用できない独自の可視化を作成する (できればそれを広く共有する)