Pytorch 를 이용해서 모델을 학습한 뒤,
모델을 평가할 때 model.eval()
과 with torch.no_grad()
를 자주 사용한다.
그렇다면 이 두 명령어의 차이는 무엇일까?
model.eval
은 해당 모델의 모든 레이어가 eval mode에 들어가게 해준다.
학습할때만 사용하는 개념인 Dropout 이나 Batchnorm 등을 비활성화 시킨다.
with torch.no_grad()
는 pytorch의 autograd engine을 비활성화 시킨다.
즉, 더이상 gradient를 트래킹하지 않는다.
따라서 필요한 메모리가 줄어들고 계산속도가 증가한다.
dropout을 비활성화 시키진 않는다.
따라서 모델을 평가할때는 아래와 같이 둘 다 사용한다.
model.eval()
with torch.no_grad():
for batch in data_loader:
#code
참고 사이트
https://discuss.pytorch.org/t/model-eval-vs-with-torch-no-grad/19615