Python for AI, Embedded/Deep Learning: PyTorch & AI Modeling

PyTorch 모델 평가 및 시각화 완벽 가이드: matplotlib부터 TensorBoard까지

임베디드 친구 2026. 5. 9. 19:03
반응형

핵심 요약 3줄

  • 정확한 성능 측정: model.eval()과 torch.no_grad()를 사용하여 추론 모드에서 객관적인 성능 지표를 산출합니다.
  • 학습 흐름 파악: Matplotlib을 통해 손실(Loss)과 정확도(Accuracy) 추이를 시각화하여 과적합(Overfitting) 여부를 진단합니다.
  • 실시간 모니터링: TensorBoard를 활용해 대규모 실험 로그를 체계적으로 관리하고 학습 상태를 실시간으로 모니터링합니다.

Generated by Gemini AI.

1. PyTorch 모델 평가 방법 및 지표

모델 설계와 학습만큼 중요한 것이 바로 검증입니다. 모델이 본 적 없는 데이터(Test Data)에서 얼마나 잘 작동하는지 확인해야 합니다.

📊 주요 성능 평가 지표 요약

지표명 목적 설명
평균 손실 (Avg Loss) 수렴 확인 예측값과 실제값의 차이를 수치화 (낮을수록 좋음)
정확도 (Accuracy) 기본 성능 전체 예측 중 정답을 맞춘 비율
혼동 행렬 (Confusion Matrix) 약점 분석 클래스별 오답 분포를 시각화하여 특정 취약점 파악
F1-Score / AUC 정밀 분석 데이터 불균형이 있을 때 정밀도와 재현율을 종합 평가

1.1 모델 평가 실전 코드 (MNIST 예제)

평가 시에는 반드시 추론 모드 설정을 확인해야 합니다.

Python
 
import torch
import torch.nn as nn
from torch.utils.data import DataLoader

def evaluate_model(model, test_loader, device, criterion):
    # 1. 평가 모드 전환 (Dropout, Batch Norm 비활성화)
    model.eval()  
    total_loss, correct, total = 0.0, 0, 0
    
    # 2. 기울기 계산 비활성화 (메모리 절약 및 속도 향상)
    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            loss = criterion(outputs, labels)
            
            total_loss += loss.item()
            _, predicted = torch.max(outputs, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
            
    avg_loss = total_loss / len(test_loader)
    accuracy = correct / total
    print(f"Test 결과 - 평균 손실: {avg_loss:.4f}, 정확도: {accuracy:.4f}")
    return avg_loss, accuracy

2. 학습 과정 시각화 기법

숫자로 된 로그만으로는 모델의 동태를 파악하기 어렵습니다. 그래프를 통해 학습 경향(Trend)을 분석해야 합니다.

2.1 Matplotlib: 손실 및 정확도 추이 분석

학습(Train)과 검증(Validation) 곡선을 한 화면에 그려 비교하면 과적합(Overfitting) 지점을 쉽게 찾을 수 있습니다.

Python
 
import matplotlib.pyplot as plt

def plot_metrics(train_losses, test_losses, train_accs, test_accs):
    epochs = range(1, len(train_losses) + 1)
    plt.figure(figsize=(14, 5))
    
    # Loss 그래프
    plt.subplot(1, 2, 1)
    plt.plot(epochs, train_losses, 'b-', label='Train Loss')
    plt.plot(epochs, test_losses, 'r--', label='Test Loss')
    plt.title('Training & Test Loss')
    plt.legend(); plt.grid(True)
    
    # Accuracy 그래프
    plt.subplot(1, 2, 2)
    plt.plot(epochs, train_accs, 'g-', label='Train Acc')
    plt.plot(epochs, test_accs, 'm--', label='Test Acc')
    plt.title('Training & Test Accuracy')
    plt.legend(); plt.grid(True)
    
    plt.show()

2.2 TensorBoard: 실시간 실험 관리

대규모 프로젝트나 여러 하이퍼파라미터를 비교할 때는 TensorBoard가 표준입니다.

기능 사용법 비고
로그 기록 writer.add_scalar('Tag', value, step) 수치 데이터(Loss, Acc) 기록
실행 tensorboard --logdir=runs 터미널에서 명령어 입력
접속 http://localhost:6006 브라우저에서 모니터링

💡 전문가를 위한 개발 팁 (Dev Tips)

  1. 과적합(Overfitting)의 전조 현상: Train Loss는 계속 내려가는데 Test Loss가 정체되거나 상승하기 시작한다면, 그것이 바로 과적합의 신호입니다. 이때 Early Stopping이나 Regularization 도입을 검토하세요.
  2. model.eval()을 빼먹는 실수: 평가 시 이 명령어를 생략하면 Dropout 레이어가 계속 작동하여 평가 결과가 매번 달라지고 성능이 저하될 수 있습니다. 습관적으로 zero_grad()만큼 중요하게 챙기세요.
  3. 로그 보관의 중요성: 실험마다 별도의 디렉토리(예: runs/exp_v1, runs/exp_v2)를 지정하면 TensorBoard에서 여러 실험의 학습 곡선을 겹쳐보며 성능을 한눈에 비교할 수 있습니다.

🏁 결론

효과적인 AI 모델 개발은 단순히 코드를 돌리는 것이 아니라, 결과를 어떻게 분석하고 시각화하느냐에 달려 있습니다.

  • Matplotlib은 가벼운 분석과 보고서용 그래프 작성에 사용하세요.
  • TensorBoard는 프로젝트 단위의 체계적인 실험 관리와 실시간 모니터링에 활용하세요.

이러한 도구들을 통해 모델의 병목 지점을 찾고, 수치 너머에 숨겨진 인사이트를 발견하시기 바랍니다.

반응형