ログ
現在の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オブジェクト、つまり str 、ints 、floats 、Tensors 、dicts 、または wandb.data_types のいずれか。 |
commit | (ブール値, 任意) メトリクス辞書をwandbサーバーに保存し、ステップをインクリメントします。Falseの場合、wandb.log はデータ引数とメトリクスを現在のメトリクス辞書に更新し、wandb.log がcommit=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
| 無効なデータが渡された場合 |