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

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

Query panels

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

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

クエリー パネルの作成

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

  1. プロジェクト の ワークスペース に移動します。
  2. 右上隅にある「Add panel( パネル を追加)」をクリックします。
  3. ドロップダウンから「Query panel(クエリー パネル )」を選択します。

「/Query panel(/クエリー パネル )」と入力して選択します。

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

  1. レポート 内で、「/Panel grid(/ パネル グリッド)」と入力して選択します。
  2. 「Add panel( パネル を追加)」ボタンをクリックします。
  3. ドロップダウンから「Query panel(クエリー パネル )」を選択します。

クエリーのコンポーネント

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

例: テーブル のクエリー

W&B Table をクエリーするとします。 トレーニング コード で、"cifar10_sample_table"というテーブルを ログ に記録します。

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

クエリー パネル 内では、次のコードでテーブルをクエリーできます。

runs.summary["cifar10_sample_table"]

これを分解すると次のようになります。

  • runs は、クエリー パネル が ワークスペース にある場合、クエリー パネル 式に自動的に挿入される変数です。 その「値」は、特定の ワークスペース で表示できる Runs のリストです。 run で使用できるさまざまな属性については、こちらをお読みください
  • summary は、Run の Summary オブジェクトを返す op です。 Op は mapped です。つまり、この op はリスト内の各 Run に適用され、Summary オブジェクトのリストが生成されます。
  • ["cifar10_sample_table"] は、predictions という パラメータ を持つ Pick op(角かっこで示されます)です。 Summary オブジェクトは ディクショナリー または マップ のように動作するため、この操作は各 Summary オブジェクトから predictions フィールドを選択します。

独自のクエリーをインタラクティブに作成する方法については、この レポート を参照してください。

設定

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

結果 パネル

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

基本操作

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

並べ替え

列オプションから並べ替えを行います。

フィルター

クエリーで直接 フィルター するか、左上隅にある フィルター ボタンを使用できます(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 オブジェクトは、 Experiments のレコードを保存します。 詳細については、 レポート のこのセクションを参照してください。簡単にまとめると、runs オブジェクトには次のものが含まれます。

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

Artifacts へのアクセス

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

  • project.artifactVersion(): プロジェクト 内の指定された名前と バージョン の特定の Artifact バージョン を返します。
  • project.artifact(""): プロジェクト 内の指定された名前の Artifact を返します。 次に、.versions を使用して、この Artifact のすべての バージョン のリストを取得できます。
  • project.artifactType(): プロジェクト 内の指定された名前の artifactType を返します。 次に、.artifacts を使用して、このタイプのすべての Artifacts のリストを取得できます。
  • project.artifactTypes: プロジェクト 下にあるすべての Artifact タイプ のリストを返します。

1 - Embed objects

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

埋め込み は、オブジェクト(人、画像、投稿、単語など)を数値のリスト、つまり ベクトル で表現するために使用されます。 機械学習とデータサイエンスのユースケースでは、埋め込みは、さまざまなアプリケーションでさまざまなアプローチを使用して生成できます。このページでは、読者が埋め込みについてよく理解しており、W&B 内で視覚的に分析することに関心があることを前提としています。

埋め込みの例

Hello World

W&B を使用すると、wandb.Table クラスを使用して埋め込みをログに記録できます。それぞれが 5 次元で構成される 3 つの埋め込みの次の例を考えてみましょう。

import wandb

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

上記のコードを実行すると、W&B ダッシュボードにデータを含む新しい Table が表示されます。 右上のパネルセレクターから [2D Projection] を選択して、埋め込みを 2 次元でプロットできます。 スマートデフォルトが自動的に選択されます。これは、歯車アイコンをクリックしてアクセスできる設定メニューで簡単にオーバーライドできます。 この例では、利用可能な 5 つの数値次元すべてを自動的に使用します。

Digits MNIST

上記の例は、埋め込みをログに記録する基本的なメカニズムを示していますが、通常はより多くの次元とサンプルを扱っています。 MNIST Digits データセット(UCI ML 手書き数字データセットs) について考えてみましょう。SciKit-Learn 経由で利用できます。 このデータセットには 1797 件のレコードがあり、それぞれに 64 の次元があります。 この問題は、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 に Table が表示されます。 [2D Projection] を選択すると、埋め込みの定義、色付け、アルゴリズム (PCA、UMAP、t-SNE)、アルゴリズムのパラメータ、さらにはオーバーレイ (この場合は、ポイントにカーソルを合わせると画像が表示されます) を設定できます。 この特定のケースでは、これらはすべて「スマートデフォルト」であり、[2D Projection] を 1 回クリックすると、非常によく似たものが表示されます。 (ここをクリックして操作この例を参照してください)。

ログ記録のオプション

埋め込みは、さまざまな形式でログに記録できます。

  1. 単一の埋め込み列: 多くの場合、データはすでに「マトリックス」のような形式になっています。 この場合、単一の埋め込み列を作成できます。ここで、セル値のデータ型は list[int]list[float]、または np.ndarray になります。
  2. 複数の数値列: 上記の 2 つの例では、このアプローチを使用し、次元ごとに列を作成します。 現在、セルには python int または float を使用できます。

Single Embedding Column Many Numeric Columns

さらに、すべてのテーブルと同様に、テーブルの構築方法に関して多くのオプションがあります。

  1. wandb.Table(dataframe=df) を使用して dataframe から直接
  2. wandb.Table(data=[...], columns=[...]) を使用して データのリスト から直接
  3. テーブルを 行ごとに (コードにループがある場合に最適) 段階的に構築 します。 table.add_data(...) を使用してテーブルに行を追加します
  4. テーブルに 埋め込み列 を追加します (埋め込み形式の予測のリストがある場合に最適)。 table.add_col("col_name", ...)
  5. 計算された列 を追加します (テーブルにマップする関数または model がある場合に最適)。 table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})

プロットオプション

[2D Projection] を選択した後、歯車アイコンをクリックしてレンダリング設定を編集できます。 目的の列を選択することに加えて (上記を参照)、目的のアルゴリズム (および目的のパラメータ) を選択できます。 以下に、それぞれ UMAP と t-SNE のパラメータを示します。