メインコンテンツまでスキップ

Log Plots

wandb.plot メソッドを使って、wandb.log でグラフを追跡できます。トレーニング中に時間とともに変化するグラフも含まれます。カスタムグラフフレームワークについて詳しく知りたい方は、このガイドをチェックしてください。

Basic Charts

これらのシンプルなチャートは、メトリクスと結果の基本的な可視化を簡単に構築することができます。

wandb.plot.line()

任意の軸上にリスト化されたカスタム折れ線グラフをログに記録します。

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次元でカーブをログに記録するのに使用できます。値のリスト同士をプロットする場合、それらのリストの値の数は正確に一致している必要があります(例えば、各ポイントは x と y を持つ必要があります)。

See in the app →

Run the code →

Model Evaluation Charts

これらのプリセットチャートには、スクリプトから直接チャートをログに記録し、UIで必要な情報を素早く簡単に確認できる組み込みの wandb.plot メソッドがあります。

wandb.plot.pr_curve()

1行で Precision-Recall curve を作成します:

wandb.log({"pr": wandb.plot.pr_curve(ground_truth, predictions)})

次の条件が満たされる際にこれをログに記録できます:

  • モデルの予測スコア (predictions) が一連の例に対して取得できる
  • その例に対応する正解ラベル (ground_truth)
  • (オプション)ラベル/クラス名のリスト(例えば、ラベルのインデックス 0 は猫、1 は犬、2 は鳥などの場合、labels=["cat", "dog", "bird"...]
  • (オプション)プロットで視覚化するためのラベルのサブセット(リスト形式)

See in the app →

Run the code →

Interactive Custom Charts

完全にカスタマイズするために、組み込みの Custom Chart プリセット を調整するか、または新しいプリセットを作成し、チャートを保存します。スクリプトから直接そのカスタムプリセットにデータをログに記録するためにチャート ID を使用します。

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

# テーブルの列をチャートのフィールドにマッピング
fields = {"x": "step", "value": "height"}

# 新しいカスタムチャートプリセットのデータを使用
# 自分の保存したチャートプリセットを使うには、vega_spec_name を変更
# タイトルを編集するには、string_fields を変更
my_custom_chart = wandb.plot_table(
vega_spec_name="carey/new_chart",
data_table=table,
fields=fields,
string_fields={"title": "Height Histogram"},
)

Run the code →

Matplotlib and Plotly Plots

W&B の Custom Chartswandb.plot で使用する代わりに、matplotlibPlotly で生成したグラフをログに記録できます。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
plt.ylabel("some interesting numbers")
wandb.log({"chart": plt})

単に matplotlib のプロットやフィギュアオブジェクトを wandb.log() に渡します。デフォルトでは、プロットを Plotly プロットに変換します。プロットを画像としてログに記録したい場合は、プロットを wandb.Image に渡すこともできます。また、Plotly のチャートも直接受け付けます。

備考

「空のプロットをログに記録しようとしました」というエラーが表示される場合は、fig = plt.figure() でプロットからフィギュアを別々に保存し、その後 wandb.log の呼び出しで fig をログに記録してください。

Log Custom HTML to W&B Tables

W&B では、Plotly や Bokeh からのインタラクティブなグラフを HTML としてログに記録し、Tables に追加することができます。

Log Plotly figures to Tables as HTML

Plotly のインタラクティブなグラフを HTML に変換して wandb Tables にログに記録できます。

import wandb
import plotly.express as px

# 新しい run を初期化
run = wandb.init(project="log-plotly-fig-tables", name="plotly_html")

# テーブルを作成
table = wandb.Table(columns=["plotly_figure"])

# Plotly フィギュアのパスを作成
path_to_plotly_html = "./plotly_figure.html"

# Plotly フィギュアの例
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])

# Plotly フィギュアを HTML に書き込み
# auto_play を False に設定すると、テーブル内のアニメーション Plotly グラフの自動再生を防止
fig.write_html(path_to_plotly_html, auto_play=False)

# Plotly フィギュアを HTML ファイルとしてテーブルに追加
table.add_data(wandb.Html(path_to_plotly_html))

# テーブルをログに記録
run.log({"test_table": table})
wandb.finish()

Log Bokeh figures to Tables as HTML

Bokeh のインタラクティブなグラフを HTML に変換して wandb Tables にログに記録できます。

from scipy.signal import spectrogram
import holoviews as hv
import panel as pn
from scipy.io import wavfile
import numpy as np
from bokeh.resources import INLINE

hv.extension("bokeh", logo=False)
import wandb


def save_audio_with_bokeh_plot_to_html(audio_path, html_file_name):
sr, wav_data = wavfile.read(audio_path)
duration = len(wav_data) / sr
f, t, sxx = spectrogram(wav_data, sr)
spec_gram = hv.Image((t, f, np.log10(sxx)), ["Time (s)", "Frequency (hz)"]).opts(
width=500, height=150, labelled=[]
)
audio = pn.pane.Audio(wav_data, sample_rate=sr, name="Audio", throttle=500)
slider = pn.widgets.FloatSlider(end=duration, visible=False)
line = hv.VLine(0).opts(color="white")
slider.jslink(audio, value="time", bidirectional=True)
slider.jslink(line, value="glyph.location")
combined = pn.Row(audio, spec_gram * line, slider).save(html_file_name)


html_file_name = "audio_with_plot.html"
audio_path = "hello.wav"
save_audio_with_bokeh_plot_to_html(audio_path, html_file_name)
Was this page helpful?👍👎