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

ログ

GitHubでソースを見る

現在のrunの履歴にデータの辞書をログします。

log(
data: Dict[str, Any],
step: Optional[int] = None,
commit: Optional[bool] = None,
sync: Optional[bool] = None
) -> None

wandb.logを使って、スカラー、画像、ビデオ、ヒストグラム、プロット、テーブルなどのrunsのデータをログします。

ライブ例、コードスニペット、ベストプラクティスなどについては、ログのガイドを参照してください。

最も基本的な使い方は wandb.log({"train-loss": 0.5, "accuracy": 0.9}) です。これにより、損失と精度がrunの履歴に保存され、これらのメトリクスのサマリー値が更新されます。 wandb.aiのワークスペースでログされたデータを可視化するか、W&Bアプリのセルフホストインスタンスでローカルに可視化するか、たとえばJupyterノートブックでローカルに可視化・探索するためにデータをエクスポートして、弊社のAPIを使用します。

UIでは、サマリー値がrunテーブルに表示され、run間の単一値を比較できます。 サマリー値は、wandb.run.summary["key"] = valueで直接設定することもできます。

ログされる値はスカラーである必要はありません。wandbオブジェクトのログがサポートされています。 例えば、wandb.log({"example": wandb.Image("myimage.jpg")})は、W&B UIで適切に表示されるサンプル画像をログします。 サポートされているすべてのタイプについては、リファレンスドキュメントを参照していただくか、3D分子構造やセグメンテーションマスク、PR曲線やヒストグラムの例があるログガイドを参照してください。 wandb.Tableは、構造化データのログに使用できます。詳細については、テーブルのログガイドを参照してください。

W&B UIでは、入れ子になったメトリクスのログが推奨され、サポートされています。 wandb.log({"train": {"acc": 0.9}, "val": {"acc": 0.8}})のような入れ子の辞書でログすると、W&B UIでは、メトリクスがtrainおよびvalセクションに整理されます。

wandbはグローバルステップを追跡し、デフォルトではwandb.logの呼び出し毎にインクリメントされます。そのため、関連するメトリクスを一緒にログすることが推奨されます。関連するメトリクスを一緒にログするのが不便な場合は、wandb.log({"train-loss": 0.5}, commit=False)を呼び出してからwandb.log({"accuracy": 0.9})を呼び出すと、wandb.log({"train-loss": 0.5, "accuracy": 0.9})を呼び出すのと同等です。 wandb.logは、1秒あたり数回以上呼び出すことを想定していません。 もっと頻繁にログを取りたい場合は、クライアント側でデータを集約するか、 パフォーマンスが低下する可能性があります。

引数
data(辞書型, 任意) シリアライズ可能なPythonオブジェクト、つまり strintsfloatsTensorsdicts、または wandb.data_types のいずれか。
commit(ブール値, 任意) メトリクス辞書をwandbサーバーに保存し、ステップをインクリメントします。Falseの場合、wandb.logはデータ引数とメトリクスを現在のメトリクス辞書に更新し、wandb.logcommit=Trueで呼び出されるまでメトリクスは保存されません。
step(整数, 任意) 処理のグローバルステップ。これにより、コミットされていない以前のステップが保持されますが、指定されたステップはデフォルトでコミットされません。
sync(ブール値, True) この引数は廃止予定であり、現在 wandb.log の振る舞いは変わりません。

例:

より多く、より詳細な例については、 ログの取り方に関するガイド を参照してください。

基本的な使い方

import wandb

wandb.init()
wandb.log({"accuracy": 0.9, "epoch": 5})

インクリメンタルログ

import wandb
wandb.init()
wandb.log({"loss": 0.2}, commit=False)
# このステップを報告する準備ができたときに別の場所で:
wandb.log({"accuracy": 0.8})

ヒストグラム

import numpy as np
import wandb

# 正規分布からランダムに勾配をサンプリング
gradients = np.random.randn(100, 100)
wandb.init()
wandb.log({"gradients": wandb.Histogram(gradients)})

numpyからの画像

import numpy as np
import wandb

wandb.init()
examples = []
for i in range(3):
pixels = np.random.randint(low=0, high=256, size=(100, 100, 3))
image = wandb.Image(pixels, caption=f"random field {i}")
examples.append(image)
wandb.log({"examples": examples})

PILからの画像

import numpy as np
from PIL import Image as PILImage
import wandb

wandb.init()
examples = []
for i in range(3):
pixels = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
pil_image = PILImage.fromarray(pixels, mode="RGB")
image = wandb.Image(pil_image, caption=f"random field {i}")
examples.append(image)
wandb.log({"examples": examples})

numpyからのビデオ

import numpy as np
import wandb

wandb.init()
# 軸は (時間, チャンネル, 高さ, 幅)です
frames = np.random.randint(low=0, high=256, size=(10, 3, 100, 100), dtype=np.uint8)
wandb.log({"video": wandb.Video(frames, fps=4)})

Matplotlibプロット

from matplotlib import pyplot as plt
import numpy as np
import wandb

wandb.init()
fig, ax = plt.subplots()
x = np.linspace(0, 10)
y = x * x
ax.plot(x, y) # y = x^2 のプロット
wandb.log({"chart": fig})

PR曲線

wandb.log({"pr": wandb.plots.precision_recall(y_test, y_probas, labels)})

3Dオブジェクト

wandb.log(
{
"generated_samples": [
wandb.Object3D(open("sample.obj")),
wandb.Object3D(open("sample.gltf")),
wandb.Object3D(open("sample.glb")),
]
}
)

| Raises | |

| :--- | :--- |

| wandb.Error | wandb.initの前に呼び出された場合 |

| ValueError | 無効なデータが渡された場合 |

Was this page helpful?👍👎