W&B 테이블 가이드
로그하고 시각화하며 데이터를 동적으로 탐색하세요 이 문서는 AI 번역본입니다. 오역이 의심되면 댓글로 알려주세요
Created on September 15|Last edited on September 15
Comment
개요
- 모델 학습 또는 평가 중에 지표, 이미지, 텍스트 등을 wandb.Table()에 로깅하세요
- 이 테이블들을 조회하고, 정렬하고, 필터링하고, 그룹화하고, 조인하며, 대화형으로 질의하고, 그 밖의 방식으로 탐색하세요
- 시간 경과에 따른 모델 예측 또는 결과 비교: 서로 다른 epoch이나 검증 단계 전반에 걸쳐 동적으로 비교하기
- 수준에서의 변경 사항을 추적하다 예측 대상 훈련 중 특정 단계에서 데이터셋의 특정 예시들그리고 이를 동적으로 집계하세요
- 시간 경과에 따른 동일 모델 내부 또는 서로 다른 모델 간에서, 예측을 대화형으로 분석하여 오류 패턴을 파악하고 개선 기회를 발견하세요
이 가이드에서는 PyTorch로 MNIST에 기본 convnet을 학습시키고, 예측에 관련된 필드를 wandb.Table()에 기록하는 방법, 시간 단계별로 테이블을 구성하는 방법, 그리고 생성된 테이블과 상호작용하며 시간에 따른 모델 성능을 분석하는 방법을 설명합니다.

새 모델을 기준 모델과 비교하고, 정답 예측을 걸러낸 뒤, 추정한 레이블별로 그룹화하여 각 레이블에 대한 시각적 예시와 함께 오분류 패턴을 확인하세요.
목차
- wandb.Table을 기록하는 방법
- 테이블 만들기
- 열 정의하기
- 각 예측을 추가하세요
- 아티팩트 동기화하기
- 테이블 시각화하기
- 기록된 아티팩트를 탐색하기
- 테이블 열기
- 테이블 작업
- 테이블의 히스토그램
- 모델 예측 비교하기
- 스텝 간 비교하기
- 서로 다른 모델 비교하기
1. wandb.Table을(를) 로깅하는 방법
1.1 테이블 만들기: 의미 있는 스텝마다
훈련 과정 전반에서 모델 예측을 비교하려면, 프로젝트 맥락에서 무엇이 의미 있는 스텝인지 먼저 결정하세요. In the 예시 Colab한 번의 에포크는 하나의 훈련 스텝(MNIST 훈련 데이터를 한 번 모두 통과)과 하나의 검증 또는 테스트 스텝(모델의 상태를 확인하기 위해 MNIST 테스트 데이터를 한 번 모두 통과/보지 못한 데이터에 대한 성능을 검증)을 포함합니다. 저는 매번 검증 스텝이 끝날 때 예측 결과를 wandb.Table()로 로깅합니다. 훈련이 더 길어지는 경우(예: 200 에포크)에는 검증과 예측 로깅을 10 또는 20 에포크마다 한 번씩만 수행하고 싶을 수 있습니다. 더 자세한 분석이 필요하다면, 검증과 함께 훈련 예측도 포함하도록 로깅 빈도를 더 높일 수도 있습니다.
1.2 열 정의하기: 각 예측 행에 무엇을 로깅할지
wandb.Table을 만들 때는 각 행(또는 예측)에 대해 보고 싶은 열을 미리 지정하세요. 열은 숫자, 텍스트, 불리언, 이미지, 비디오, 오디오 등 다양한 타입이 될 수 있습니다. 다음과 같은 열들을 고려해 볼 수 있습니다:
- 이미지 픽셀: 모델이 예측을 할 때 무엇을 보고 있나요?
- 모델의 예측 레이블 그리고 정답 레이블: 모델이 맞았나요?
- 이미지 ID 데이터셋에서 단일 예시를 추적하고 여러 모델 버전 간 성능을 비교하세요. 대부분의 경우 서로 다른 Tables 간에 조인 키로 사용할 고유 식별자가 필요합니다.데이터셋에 의미 있는 ID가 없다면, 고정된 데이터셋 순서에서 해당 이미지의 인덱스를 그대로 사용해도 됩니다.
- 모든 클래스에 대한 confidence score: 예측 분포를 시각화하고, confusion matrix를 생성하며, 오류 패턴을 찾아볼 수 있습니다.
- 예측이나 이미지에 관한 기타 지표들 기존 열에서 유도할 수 없음나중에 필요 없으면 열을 쉽게 삭제할 수 있어요 :)
할 수 있습니다 파생 값으로 새 열을 동적으로 추가하기 Table을 로깅한 뒤에도 가능합니다. 예를 들어 MNIST에서 손글씨의 폐곡선 형태를 평가하기 위해 숫자 0, 6, 8, 9에 대한 confidence score를 합산하고, 이 값을 "score_loops" 열로 추가해 코드 재실행 없이도 이 열을 사용해 예측을 정렬, 필터링, 비교할 수 있습니다.
wandb.Table을 생성하는 예시 코드
# create a wandb Artifact for each meaningful step# I use the unique wandb run id to organize my artifactstest_data_at = wandb.Artifact("test_samples_" + str(wandb.run.id), type="predictions")# create a wandb.Table() with columns for the id, image pixels,# guess (model's prediction), the ground truth, confidence scores for all labelscolumns=["id", "image", "guess", "truth"]for digit in range(10):columns.append("score_" + str(digit))test_table = wandb.Table(columns=columns)
1.3 각 예측을 행으로 추가하기
검증 루프 안에서 각 예측을 테이블의 한 행으로 추가하세요. In the 예시 Colab단순성을 위해 로깅하는 이미지/행의 수는 최소로 유지합니다. 테이블당 최대 50,000행까지 로깅할 수 있으며, 이후 분석 작업—예를 들어 동일한 id로 서로 다른 모델(및 다른 테이블)의 예측을 조인하는 작업—은 새로운 복사본을 만들지 않고 데이터를 효율적으로 참조합니다.
test_table.add_data(img_id, wandb.Image(img), guess, truth, *scores)
1.4 아티팩트 동기화하기
해당 스텝의 테이블이 완성되면, 아티팩트에 추가하고 wandb에 로깅하세요:
# log predictions table to wandb, giving it a nametest_data_at.add(test_table, "predictions")wandb.run.log_artifact(test_data_at)
2. 테이블 시각화하기
Tables를 로깅한 후에는 인터랙티브하게 탐색할 수 있습니다.

이미지, 예측 레이블(guess), 정답 레이블, 그리고 모든 신뢰도 점수를 확인하세요

상세 버전
2.1 로깅된 아티팩트 탐색하기
특정 실험 실행에서 로깅된 wandb.Table을 확인하려면:
- 실행 워크스페이스를 열세요 (예: https://wandb.ai/stacey/mnist-viz/runs/1aufmxzf) 왼쪽 사이드바에서 "Artifacts" 아이콘(팬케이크 더미 모양)을 선택하세요.
- 실행에 대한 입력 아티팩트와 출력 아티팩트 목록이 표시됩니다. 이 예에서는 5번의 검증 단계마다 각각 아티팩트 버전을 하나씩(v0부터 v4까지) 로깅했고, 각 버전은 동일한 수의 학습 에포크 후에 모델 성능을 평가한 결과입니다(예: v0는 1 에포크 후, v1은 2 에포크 후 등).

2.2 테이블 열기
아티팩트 버전에 대한 정보를 더 보려면 이들 중 하나의 버전을 선택하세요. 각 버전에 별칭(짧은 태그)이나 더 긴 노트를 추가로 달 수도 있습니다. 시각적 테이블을 보려면 테이블을 선택하세요(아래의 "predictions", 초록색으로 강조 표시됨).

2.3 테이블 작업
- 필터: 모델이 어디에서 틀렸을까요? Filter 버튼을 눌러 다음과 같은 표현식을 입력하세요. x["guess"] != x["truth"] 잘못된 예측만 보려면
- 정렬 열에서: 특정 클래스에 대한 최고 신뢰도의 오류는 무엇일까요? 열 헤더의 점 세 개 아이콘을 클릭해 해당 열 기준으로 정렬하세요. 예를 들어 9처럼 보이는 4와 같은 특정 경우에 집중하려면 다음과 같은 표현식을 사용하세요. x["guess"] = 9 and x["truth"] = 4그런 다음 "score_9" 기준으로 정렬하여 가장 혼동되는 4를 확인하세요(아래 첫 번째 이미지).
- 그룹 열에서: 모델이 틀리는 패턴이나 가장 자주 발생하는 오류 유형이 있나요? 정답 추측을 모두 필터링한 뒤 (x["guess"] != x["truth"] ), "guess" 기준으로 그룹화하여 예측된 클래스로 정리된 예시들을 스크롤해 살펴보세요.
- 열 추가 파생 정보를 보려면: "guess" 기준으로 그룹화한 뒤, 헤더의 점 세 개 메뉴에서 열을 추가하고 편집하여 다음을 표시하세요. x["image"].count. 이제 이 파생 열을 기준으로 정렬해 가장 많이 혼동되는 클래스를 확인할 수 있습니다(아래 두 번째 이미지). 또한 열 순서를 임시로 바꾸기 위한 대안으로 열을 복제해 추가하면, 가장 중요한 정보를 나란히 볼 수 있습니다.
- 열 제거 필요하지 않다면

9처럼 보이는 4만 필터링하고, 이미지에 더 가까운 위치에 "score_9" 열을 추가한 뒤, "score_9" 기준으로 정렬하세요.

이 모델이 가장 자주 틀리게 예측하는 클래스는 9입니다. 실제 레이블의 히스토그램을 보면, 9로 혼동된 실제 클래스 중 가장 빈도가 높은 것은 4이고, 8로 혼동된 실제 클래스는 5가 가장 많습니다. 7로 혼동된 경우에는 3이, 2로 혼동된 경우에는 7이 가장 많으며, 이와 같은 패턴이 이어집니다.
2.4 테이블의 히스토그램
그룹화 작업이 Table에서 숫자 값을 집계하면, 기본적으로 해당 분포의 히스토그램이 표시됩니다. 이는 더 높은 수준에서 패턴을 시각화하고 데이터의 상관관계를 파악하는 데 유용합니다. 예를 들어, 정답 예측을 필터링해 제외한 뒤 보면, 이 모델은 여전히 대각선 방향에서 가장 높은 신뢰도를 보입니다(분포가 넓고 점수가 높음). 반면, 비대각선 셀에서는 전반적으로 신뢰도가 낮습니다(0에서 피크). 이는 모델의 추측이 최대 신뢰도 점수이기 때문에 예상되는 현상입니다. 그러나 이와 다른 양상—다른 레이블에 대해 신뢰도가 일시적으로 높아지는 작은 돌출—은 모델이 혼동하는 영역이나 레이블 쌍을 나타냅니다.

이 모델은 4를 오답으로 단 한 번만 추측했습니다(마지막 행).

확대해서 보면, 픽셀 없이도 두 번째 열의 실제 분포가 가장 유용합니다. 비대각선 셀들은 모델이 어떤 숫자들을 혼동하는지 보여줍니다. 예를 들어, 추측 1에 대한 고신뢰도 작은 막대가 점수 0에서 나타납니다(두 번째 행, 세 번째 열).
3. 모델 예측 비교
특정 시점의 모델을 깊이 탐색하기 위해 모델 예측 Table을 사용할 수 있습니다. 그렇다면 시간에 따른 모델 성능을 어떻게 평가하고, 어떻게 개선할지 이해할 수 있을까요? 이러한 모든 시각화와 테이블 작업은 비교 관점에서도 활용할 수 있습니다.
3.1 스텝 간 비교
같은 모델의 서로 다른 두 ��점에서 생성된 두 개의 Table을 선택하세요. 첫 번째 시점은 해당 Run의 "Artifacts" 섹션으로 이동한 뒤, 원하는 artifact 버전으로 들어가 선택합니다. 여기서는 제 "baseline" 모델에서 처음으로 기록된 validation 스텝을 보고 있습니다. 초기 예측 artifact들의 이름에 run id가 포함되어 있는 점(예: "test_samples_3h9o3dsk")을 눈치채셨을 수도 있습니다. 이는 어떤 Run이 어떤 artifact 버전을 생성했는지 추적할 수 있게 해 주는 좋은 기본 네이밍 패턴입니다. 어떤 것이 중요한지, 어떤 것을 유지할지 결정한 뒤에는 UI에서 더 명확하게 보이도록 이름을 바꾸고, 제가 가한 변경 사항에 대한 노트를 남길 수 있습니다.

이 스텝의 모델 예측을 확인하려면 기록된 Table(여기서는 "predictions")을 클릭하세요. 다음으로 비교할 다른 스텝을 선택합니다. 예를 들어, 이 모델의 최종 validation epoch인 "v4 latest"를 선택한 뒤 "Compare"를 클릭하세요.

초기 화면은 다음과 같이 보입니다:

고급 쿼리에는 유용하지만, 저는 나란히 비교하는 렌더링을 선호합니다. 상단 드롭다운에서 "WbTableFile"을 "SplitPanel → WbTableFile"로 변경하세요.
나란히 보기: 왼쪽 파란색, 오른쪽 노란색

이제 시간에 따라 모델 예측을 비교할 수 있습니다.
- 추가 학습 epoch을 거치며 동일한 예시에 대한 예측 레이블과 신뢰도 점수의 변화를 관찰하세요.
- 두 Table을 나란히 동일한 방식으로 필터링하고 그룹화하여, 클래스별 오류 수 변화, 혼동 행렬, 가장 많이 혼동되는 레이블 쌍, 가장 어려운 음성 샘플, 레이블별 신뢰도 점수 분포 등 다양한 지표의 변화를 확인하세요.
- 훈련을 다시 실행할 필요 없이 정밀도와 재현율 같은 파생 정보를 담은 컬럼을 추가하세요.
3.2 서로 다른 모델 비교
서로 다른 모델 간 결과를 비교할 때도 같은 절차를 따르세요. 여기서는 베이스라인과 새로운 모델 변형의 예측을 비교합니다. 2x_layers_2x_lr첫 번째 합성곱 레이어의 채널 수를 32에서 64로, 두 번째를 128에서 256으로 두 배로 늘리고, 학습률을 0.001에서 0.002로 올린 모델에서. From 이 라이브 예시, 저는 "split panel" 뷰를 사용해 학습 한 번의 epoch 이후 잘못된 예측만으로 필터링했습니다. 왼쪽의 베이스라인은 152개의 예시를 틀린 반면, 두 배로 확대한 변형 모델은 238개를 틀렸습니다.

이후에 "guess"로 그룹화하고, 각 그룹의 항목 수를 세는 컬럼을 추가한 뒤 그 컬럼으로 정렬해 보면, 베이스라인은 8을 3으로 가장 자주 잘못 예측하는 반면, 두 배로 확대한 변형 모델은 4를 9로 가장 자주 잘못 예측합니다:

두 모델의 예측을 다시 비교하며 같은 분석을 반복하면 에폭 5회 학습의라이브 예시→ ), 두 배로 확대한 변형 모델이 베이스라인과 비슷하거나 약간 앞섭니다(오분류 90건 vs 95건). 그리고 두 모델 모두에서 5와 7이 가장 자주 틀리는 추정값이 됩니다.

이 예시는 단순한 모델 비교 사례이지만, 코드를 다시 실행하거나 즉석 스크립트를 새로 쓰거나 새로운 차트를 만들 필요 없이, Tables로 수행할 수 있는 탐색적 분석의 용이함, 유연성, 그리고 깊이를 잘 보여줍니다.
테이블 비교 작업과 뷰
단일 테이블 뷰에서 가능한 모든 작업은 비교 뷰에도 동일하게 적용됩니다. 즉, 위에서 설명한 대로 필터, 정렬, 그룹화, 컬럼 추가/제거를 사용할 수 있습니다. 나란히 표시되는 "SplitPanel" 뷰에서는 수행한 모든 작업이 양쪽 패널에 동시에 적용됩니다. 기본 플랫 형태의 "WbTableFile" 뷰에서는 별칭 0(파란색 하이라이트) 또는 1(노란색 하이라이트)을 사용해 개별 테이블을 지정할 수 있습니다. 플랫 뷰에서는 누적 히스토그램으로 점수와 기타 지표를 비교할 수 있습니다. 이 뷰를 사용하려면 조인에 사용할 컬럼을 지정해야 하며, 일반적으로 예제 ID 컬럼을 사용합니다.

질의응답
이 해당 기능은 베타 버전입니다., 그리고 직접 사용해 보시면서 아래 댓글란에 질문과 의견을 남겨 주시면 정말 감사하겠습니다! 확인해 보세요 추가 문서 그리고 점점 늘어나는 예시 Colab 목록 여기.
Add a comment