본문 바로가기
Artificial Intelligence

[Pytorch] model.eval()과 with torch.no_grad()의 차이점

by sohyunwriter 2023. 4. 20.

pytorch를 이용해서 모델을 학습한 뒤, 모델을 평가할 때 model.eval()과 with torch.no_grad()를 둘다 사용하라고 하는데, 두 명령어의 차이는 무엇일까?

 

model.eval()

  • 해당 model의 모든 layer가 eval mode에 들어가게 함
  • 학습할 때만 사용하는 개념인 Dropout layer이나 Batch Normalization Layer 등을 비활성화시킴

 

with torch.no_grad()

  • with torch.no_grad()는 pytorch의 autograd engine을 비활성화시킴. 즉, 더이상 gradient를 트래킹하지 않음
  • 필요한 메모리가 줄어들고 계산속도가 증가함
# pytorch model evaluate code
model.eval()
with torch.no_grad():
	for batch in data_loader:
    	# code

 

더보기

참고문헌

stackoverflow.com/questions/55627780/evaluating-pytorch-models-with-torch-no-grad-vs-model-eval

androidkt.com/use-of-model-eval-and-with-torch-no_grad-in-pytorch-model-evaluate/