본문으로 건너뛰기

로그

현재 실행의 기록에 데이터 사전을 로그합니다.

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

wandb.log를 사용하여 실행에서 데이터를 로그하세요. 예를 들어 스칼라, 이미지, 비디오, 히스토그램, 플롯, 테이블 같은 것들입니다.

실제 예시, 코드조각, 모범 사례 등을 보려면 로그 가이드를 참조하세요.

가장 기본적인 사용법은 wandb.log({"train-loss": 0.5, "accuracy": 0.9})입니다. 이렇게 하면 손실과 정확도가 실행의 기록에 저장되고 이 메트릭의 요약 값이 업데이트됩니다.

wandb.ai에서 로그된 데이터를 시각화하거나, W&B 앱의 자체 호스팅 인스턴스에서 로컬로 시각화하거나, Jupyter 노트북에서 로컬로 시각화하고 탐색하기 위해 데이터를 내보낼 수 있습니다. API를 참조하세요.

UI에서는 실행 테이블에서 실행 간의 단일 값 비교를 위해 요약 값이 표시됩니다. 요약 값은 wandb.run.summary["키"] = 값으로 직접 설정할 수도 있습니다.

로그된 값은 스칼라일 필요가 없습니다. 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의 trainval 섹션으로 구성됩니다.

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는 초당 몇 번 이상 호출할 의도로 설계되지 않았습니다. 그보다 더 자주 로그하려면 클라이언트 측에서 데이터를 집계하는 것이 좋으며, 그렇지 않으면 성능이 저하될 수 있습니다.

인수
data(dict, 선택적) 직렬화 가능한 파이썬 오브젝트의 사전, 예: str, ints, floats, Tensors, dicts, 또는 wandb.data_types 중 하나.
commit(boolean, 선택적) 메트릭 사전을 wandb 서버에 저장하고 스텝을 증가시킵니다. false인 경우 wandb.log는 현재 메트릭 사전을 데이터 인수로만 업데이트하며, commit=Truewandb.log가 호출될 때까지 메트릭이 저장되지 않습니다.
step(integer, 선택적) 처리할 글로벌 스텝입니다. 이전에 커밋되지 않은 모든 스텝이 유지되지만 지정된 스텝을 커밋하지 않는 것이 기본값입니다.
sync(boolean, True) 이 인수는 더 이상 사용되지 않으며 현재 wandb.log의 동작을 변경하지 않습니다.

예시:

더 자세한 예시는 로그 가이드를 참조하세요.

기본 사용법

import wandb

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

증분 로깅

import wandb

run = wandb.init()
run.log({"loss": 0.2}, commit=False)
# 나중에 이 단계를 보고할 준비가 되었을 때 어딘가에서:
run.log({"accuracy": 0.8})

히스토그램

import numpy as np
import wandb

# 정규 분포에서 무작위로 그레이디언트를 샘플링합니다
gradients = np.random.randn(100, 100)
run = wandb.init()
run.log({"gradients": wandb.Histogram(gradients)})

numpy에서 이미지

import numpy as np
import wandb

run = 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)
run.log({"examples": examples})

PIL에서 이미지

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

run = 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)
run.log({"examples": examples})

numpy에서 비디오

import numpy as np
import wandb

run = wandb.init()
# 축은 (시간, 채널, 높이, 너비)입니다
frames = np.random.randint(low=0, high=256, size=(10, 3, 100, 100), dtype=np.uint8)
run.log({"video": wandb.Video(frames, fps=4)})

Matplotlib 플롯

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

run = wandb.init()
fig, ax = plt.subplots()
x = np.linspace(0, 10)
y = x * x
ax.plot(x, y) # y = x^2 플롯
run.log({"chart": fig})

PR 곡선

import wandb

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

3D 오브젝트

import wandb

run = wandb.init()
run.log(
{
"generated_samples": [
wandb.Object3D(open("sample.obj")),
wandb.Object3D(open("sample.gltf")),
wandb.Object3D(open("sample.glb")),
]
}
)
예외
wandb.Errorwandb.init 호출 전에 사용된 경우
ValueError유효하지 않은 데이터가 전달된 경우
Was this page helpful?👍👎