토니의 연습장

loss 값 저장 및 출력 본문

AI 일반/모델, 아키텍처, 구현

loss 값 저장 및 출력

bellmake 2025. 1. 14. 15:29

model 로 train 및 test 한 후에 train/test loss value 를 출력하고자 할 때, PyTorch 텐서(requires_grad=True) 상태에서 바로 NumPy 배열로 변환하려고 하기 때문에 발생합니다. Matplotlib에서 데이터를 플롯할 때는 numpy(), item(), 또는 해당 텐서를 분리(detach())해서 넘겨주어야 합니다. 이렇게 하면 텐서 자체를 유지하면서도 NumPy로 변환할 수 있습니다.

loss_values.append(loss.detach().numpy())
# 혹은 CPU로 먼저 보낼 경우
loss_values.append(loss.detach().cpu().numpy())

 

그런데 가장 출력 등의 용도로 사용하기 위해 간단하고 편리한 방법은, 스칼라 텐서의 경우 가능한 방법으로 loss.item() 을 사용하면 Python의 float으로 추출할 수 있습니다.

# 1. Loop data
for epoch in range(epochs):
    ...
    # 3. Calculate Loss
    loss = loss_fn(y_pred, y_train)
    ...
    # 6. Optimizer Step
    optimizer.step()
    
    # Testing
    ...
    test_loss = loss_fn(test_pred, y_test)

    if epoch % 10 == 0:
        epoch_count.append(epoch)
        # loss.item()으로 float로 변환
        loss_values.append(loss.item())
        test_loss_values.append(test_loss.item())
        print(f"Epoch:{epoch}|Train loss:{loss.item()}|Test loss:{test_loss.item()}")
    
    print(model_0.state_dict())

 

-> 추후 plot 시에 오류 발생하지 않음

결론

  1. 손실값이 스칼라인 경우loss.item() 사용을 권장합니다.
  2. 배치 형태의 텐서를 그래프화할 경우 → .detach().cpu().numpy() 로 변환 후 사용.

위 방법으로 손실값을 파이썬 숫자나 넘파이 배열로 변환하면 Matplotlib에 문제없이 전달되어 그래프를 그릴 수 있습니다.

'AI 일반 > 모델, 아키텍처, 구현' 카테고리의 다른 글

causal mask  (1) 2025.05.28
Model workflow  (1) 2025.01.14
출력 정밀도 변환 클래스 정의 (CastOutputToFloat)  (5) 2024.11.14
Conv2d / ConvTranspose2d  (0) 2024.09.19
Fine Tuning (Transfer Learning의 한 종류)  (1) 2024.08.28