더북(TheBook)

Note ≡ | model.train( ) & model.eval( )

model.train(): 훈련 데이터셋에 사용하며 모델 훈련이 진행될 것임을 알립니다. 이때 드롭아웃(dropout)이 활성화됩니다.

model.eval(): 모델을 평가할 때는 모든 노드를 사용하겠다는 의미로 검증과 테스트 데이터셋에 사용합니다.

 

model.train()model.eval()을 선언해야 모델의 정확도를 높일 수 있습니다.

model.train()은 앞에서 사용해 보았으니, 이번에는 model.eval()에 대한 사용 방법을 알아봅시다.

model.eval() ------ 검증 모드로 전환(dropout=False)
with torch.no_grad(): ------ ①
    valid_loss = 0

    for x, y in valid_dataloader:
        outputs = model(x)
        loss = F.cross_entropy(outputs, y.long().squeeze())
        valid_loss += float(loss)
        y_hat += [outputs]

valid_loss = valid_loss / len(valid_loader)

model.eval()에서 with torch.no_grad()를 사용하는 이유는 다음과 같습니다.

파이토치는 모든 연산과 기울기 값을 저장합니다. 하지만 검증(혹은 테스트) 과정에서는 역전파가 필요하지 않기 때문에 with torch.no_grad()를 사용하여 기울기 값을 저장하지 않도록 합니다. 이와 같은 과정을 통해 기울기 값을 저장하고 기록하는 데 필요한 메모리와 연산 시간을 줄일 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.