무효 클릭 IP 추적 중...
머신러닝,딥러닝/딥러닝

[pytorch] model.eval() vs torch.no_grad() 차이

꼬예 2022. 12. 21.

model.eval(), torch.no_grad() 둘다 train할때 사용 되지 않는다는점에서 공통점이 있다.

이 때문에 막연히 비슷한 기능을 한다고 착각하기 쉽다.

 

이번 포스팅에선 둘의 기능 차이에 대해 알아보자.

 

1) model.eval()

nn.Module 클래스 메소드다.

이 친구는 training할때 유용한 기능(dropout, batch-normalization)을 작동하지 않게 해준다.

참고로 dropout은 오버피팅을 방지하고 batch-normalization은 generalization을 향상시켜준다.

 

이 기능을 inference할때 쓰게 된다면 오히려 성능이 하락된다.

 

2) torch.no_grad()

요즘엔 torch_no_grad() 대신 torch.inference_mode()를 많이 쓴다.

torch_no_grad()의 최신버전이라 이해하면 편하다.

 

이 함수는 with 구문과 함께 쓰이는데 Gradient computation 기능을 꺼버리는 역할을 한다.

inference하는 동안 gradient 계산이 필요 없기 때문이다.

결과적으로 performance를 향상시키기 위한 목적이라 보면 된다.

 

정리)

model.eval()은 모델 자체에 behavior에 대한 부분을 수정하는 거라면 torch.inference_mode는 inference 동안 성능을 향상시키기 위해 쓰는거다.

 

 

이 글과 읽으면 좋은글

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글