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

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

クエリパネル

このページの一部の機能はベータ版であり、機能フラグの後ろに隠れています。関連するすべての機能をアンロックするには、プロフィールページの自己紹介に weave-plot を追加してください。

クエリパネルを使用してデータをクエリし、インタラクティブに視覚化します。

クエリパネルを作成する

ワークスペースまたはレポート内にクエリを追加します。

  1. プロジェクトのワークスペースに移動します。
  2. 右上のコーナーにある Add panel をクリックします。
  3. ドロップダウンから Query panel を選択します。

/Query panel と入力して選択します。

または、一連の Runs とクエリを関連付けることができます。

  1. レポート内で、/Panel grid と入力して選択します。
  2. Add panel ボタンをクリックします。
  3. ドロップダウンから Query panel を選択します。

クエリコンポーネント

クエリ式を使用して、W&Bに保存されたデータ、例えば Runs、Artifacts、Models、Tables などをクエリします。

例: テーブルをクエリする

W&B Tableをクエリしたいとします。トレーニングコード内で "cifar10_sample_table" という名前のテーブルをログします:

import wandb
wandb.log({"cifar10_sample_table":<MY_TABLE>})

クエリパネル内でテーブルをクエリするには次のようにします:

runs.summary["cifar10_sample_table"]

これを分解すると:

  • runs は、ワークスペースに Query Panel があるときに自動的に Query Panel Expressions に注入される変数です。その値は、その特定のワークスペースに表示される Runs のリストです。Run内の利用可能な異なる属性についてはこちらをお読みください
  • summary は、Run の Summary オブジェクトを返す操作です。Opsは マップされる ため、この操作はリスト内の各 Run に適用され、その結果として Summary オブジェクトのリストが生成されます。
  • ["cifar10_sample_table"] は Pick 操作(角括弧で示され)、predictions というパラメータを持ちます。Summary オブジェクトは辞書またはマップのように動作するため、この操作は各 Summary オブジェクトから predictions フィールドを選択します。

インタラクティブに独自のクエリの書き方を学ぶには、こちらのレポートを参照してください。

設定

パネルの左上コーナーにあるギアアイコンを選択してクエリ設定を展開します。これにより、ユーザーはパネルのタイプと結果パネルのパラメータを設定できます。

結果パネル

最後に、クエリ結果パネルは、選択したクエリパネル、設定によって設定された構成に基づいて、データをインタラクティブに表示する形式でクエリ式の結果をレンダリングします。次の画像は、同じデータのテーブルとプロットを示しています。

基本操作

次に、クエリパネル内で行える一般的な操作を示します。

ソート

列オプションからソートします:

フィルター

クエリ内で直接、または左上隅のフィルターボタンを使用してフィルターできます(2枚目の画像)。

マップ

マップ操作はリストを反復し、データ内の各要素に関数を適用します。これは、パネルクエリを使用して直接行うことも、列オプションから新しい列を挿入することによって行うこともできます。

グループ化

クエリを使用してまたは列オプションからグループ化できます。

連結

連結操作により、2つのテーブルを連結し、パネル設定から連結または結合できます。

結合

クエリ内でテーブルを直接結合することも可能です。次のクエリ式を考えてみてください:

project("luis_team_test", "weave_example_queries").runs.summary["short_table_0"].table.rows.concat.join(\
project("luis_team_test", "weave_example_queries").runs.summary["short_table_1"].table.rows.concat,\
(row) => row["Label"],(row) => row["Label"], "Table1", "Table2",\
"false", "false")

左のテーブルは次のように生成されます:

project("luis_team_test", "weave_example_queries").\
runs.summary["short_table_0"].table.rows.concat.join

右のテーブルは次のように生成されます:

project("luis_team_test", "weave_example_queries").\
runs.summary["short_table_1"].table.rows.concat

ここで:

  • (row) => row["Label"] は各テーブルのセレクタであり、結合する列を決定します
  • "Table1""Table2" は、結合された各テーブルの名前です
  • truefalse は、左および右の内/外部結合設定です

Runsオブジェクト

クエリパネルを使用して runs オブジェクトにアクセスします。Runオブジェクトは、実験の記録を保存します。詳細については、こちらのレポートのセクションを参照してくださいが、簡単な概要として、runs オブジェクトには以下が含まれます:

  • summary: Runの結果を要約する情報の辞書です。精度や損失のようなスカラーや、大きなファイルを含むことができます。デフォルトでは、wandb.log()は記録された時系列の最終的な値をsummaryに設定します。直接summaryの内容を設定することもできます。summaryはRunの出力と考えてください。
  • history: モデルがトレーニング中に変化する値を格納するための辞書のリストです。コマンド wandb.log() はこのオブジェクトに追加します。
  • config: Runの設定情報を含む辞書で、トレーニングランのハイパーパラメーターやデータセットアーティファクトを作成するランの前処理方法などが含まれます。これらはRunの「入力」として考えてください。

Artifactsにアクセスする

Artifacts は W&B の中核概念です。これは、バージョン管理された名前付きファイルやディレクトリーのコレクションです。Artifacts を使用して、モデルの重み、データセット、およびその他のファイルやディレクトリーを追跡します。Artifacts は W&B に保存され、他の runs でダウンロードまたは使用できます。詳細と例は、こちらのセクションのレポートで確認できます。Artifacts は通常、project オブジェクトからアクセスします:

  • project.artifactVersion(): プロジェクト内の特定の名前とバージョンのアーティファクトバージョンを返します
  • project.artifact(""): プロジェクト内の特定の名前のアーティファクトを返します。その後、.versions を使用してこのアーティファクトのすべてのバージョンのリストを取得できます
  • project.artifactType(): プロジェクト内の特定の名前の artifactType を返します。その後、.artifacts を使用して、このタイプを持つすべてのアーティファクトのリストを取得できます
  • project.artifactTypes: プロジェクト内のすべてのアーティファクトタイプのリストを返します

1 - オブジェクトを埋め込む

W&B の Embedding Projector を使用すると、ユーザー は PCA、UMAP、t-SNE などの一般的な次元削減アルゴリズムを用いて多次元埋め込みを 2D 平面上にプロットできます。

Embeddings はオブジェクト(人物、画像、投稿、単語など)を数字のリストで表現するために使用されます。これを ベクトル と呼ぶこともあります。機械学習やデータサイエンスのユースケースでは、Embeddings は様々な手法を用いて生成でき、幅広いアプリケーションで利用されます。このページでは、読者が Embeddings に精通しており、W&B 内でそれらを視覚的に分析することに関心があることを前提としています。

Embedding の例

ハローワールド

W&B を使用すると、wandb.Table クラスを使用して Embeddings をログできます。以下は、5 次元からなる 3 つの Embeddings の例です。

import wandb

wandb.init(project="embedding_tutorial")
embeddings = [
    # D1   D2   D3   D4   D5
    [0.2, 0.4, 0.1, 0.7, 0.5],  # embedding 1
    [0.3, 0.1, 0.9, 0.2, 0.7],  # embedding 2
    [0.4, 0.5, 0.2, 0.2, 0.1],  # embedding 3
]
wandb.log(
    {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
)
wandb.finish()

上記のコードを実行すると、W&B ダッシュボードにデータを含む新しいテーブルが作成されます。右上のパネルセレクタから 2D Projection を選択して Embeddings を 2 次元でプロットすることができます。デフォルトで賢明な設定が自動的に選択されますが、設定メニューから簡単に上書きできます。この例では、利用可能な 5 つの数値次元をすべて自動的に使用しています。

数字のMNIST

上記の例では Embeddings の基本的なログ方法を示しましたが、通常はもっと多くの次元とサンプルを扱います。UCI の手書き数字データセット UCI ML hand-written digits datasetを使って、SciKit-Learn を通じて提供される MNIST 数字データセットを考えてみましょう。このデータセットには 64 次元を持つ 1797 のレコードが含まれています。この問題は10クラスの分類ユースケースです。また、可視化のために入力データを画像に変換することもできます。

import wandb
from sklearn.datasets import load_digits

wandb.init(project="embedding_tutorial")

# データセットをロードする
ds = load_digits(as_frame=True)
df = ds.data

# "target" カラムを作成する
df["target"] = ds.target.astype(str)
cols = df.columns.tolist()
df = df[cols[-1:] + cols[:-1]]

# "image" カラムを作成する
df["image"] = df.apply(
    lambda row: wandb.Image(row[1:].values.reshape(8, 8) / 16.0), axis=1
)
cols = df.columns.tolist()
df = df[cols[-1:] + cols[:-1]]

wandb.log({"digits": df})
wandb.finish()

上記のコードを実行した後、再び UI にテーブルが表示されます。 2D Projection を選択することで、Embedding の定義、色付け、アルゴリズム(PCA, UMAP, t-SNE)、アルゴリズムのパラメータ、さらにはオーバーレイ(この場合、点の上にマウスを置くと画像が表示されます)の設定を行うことができます。この特定のケースでは、すべて「スマートデフォルト」が設定されており、2D Projection をクリックするだけで非常に類似したものが見えるはずです。(この例を試してみてください)。

ログオプション

Embeddings はさまざまなフォーマットでログすることができます:

  1. 単一の埋め込みカラム: データがすでに「行列」形式になっていることが多いです。この場合、カラムのデータ型は list[int], list[float], または np.ndarray にすることができます。
  2. 複数の数値カラム: 上記の2つの例では、各次元に対してカラムを作成するこの方法を使用します。現在、セルには Python の int または float が受け入れられます。

Single Embedding Column Many Numeric Columns

さらに、他のすべてのテーブルと同様に、テーブルを構築する方法について多くのオプションがあります:

  1. データフレーム から直接 wandb.Table(dataframe=df) を使用して
  2. データのリスト から直接 wandb.Table(data=[...], columns=[...]) を使用して
  3. 行単位で段階的に テーブルを構築する(コード内にループがある場合に最適)。table.add_data(...) を使ってテーブルに行を追加します。
  4. テーブルに 埋め込みカラム を追加する(Embedding の形式で予測のリストがある場合に最適): table.add_col("col_name", ...)
  5. 計算済みカラム を追加する(関数やモデルをテーブル全体に適用したい場合に最適): table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})

プロットオプション

2D Projection を選択した後、ギアアイコンをクリックしてレンダリング設定を編集できます。上記のカラムの選択に加えて、興味のあるアルゴリズム(および必要なパラメータ)を選ぶことができます。以下に、UMAP と t-SNE の各パラメータが表示されています。