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 동안 성능을 향상시키기 위해 쓰는거다.
이 글과 읽으면 좋은글
'머신러닝,딥러닝 > 딥러닝' 카테고리의 다른 글
[pytorch] pretrained model 쉽게 사용하는 방법 (0) | 2022.12.26 |
---|---|
[pytorch] nn.Dropout inplace 역할은 무엇일까? (0) | 2022.12.23 |
[pytorch] ImageFolder 사용 방법 (0) | 2022.12.21 |
[pytorch] transforms.Compose 사용 방법 (0) | 2022.12.21 |
AutoEncoder(오토인코더) 예제 코드 (0) | 2022.12.19 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.