[Pytorch] model.eval() vs with torch.no_grad()

가람·2021년 8월 6일
0

Pytorch 를 이용해서 모델을 학습한 뒤,
모델을 평가할 때 model.eval()with torch.no_grad() 를 자주 사용한다.
그렇다면 이 두 명령어의 차이는 무엇일까?

model.eval()

model.eval은 해당 모델의 모든 레이어가 eval mode에 들어가게 해준다.
학습할때만 사용하는 개념인 Dropout 이나 Batchnorm 등을 비활성화 시킨다.

no_grad()

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

profile
hello world :)

0개의 댓글