Gradient 추적 멈추기
기본적으로, requires_grad=True인 모든 텐서들은 연산 기록을 추적하고 gradient 계산을 지원한다.
그러나 모델을 test 할 때와 같이 forward 연산만 필요한 겨우, 이러한 추적이나 지원이 필요 없을 수 있다.
그럴 때에는 연산 코드를 torch.no_grad()을 사용하여 연산 추적을 멈출 수 있다.
z = torch.matmul(x, w)+b
print(z.requires_grad) # True
with torch.no_grad():
z = torch.matmul(x, w)+b
print(z.requires_grad) # False
동일한 결과를 얻는 다른 방법은 텐서에 detach() 메소드를 사용하는 것이다.
z = torch.matmul(x, w)+b
z_det = z.detach()
print(z_det.requires_grad) # False
gradient 추적을 멈춰야 하는 이유들은 다음과 같다.
1. 신경망의 일부 매개변수를 고정된 매개변수(frozen parameter)로 표시한다. 이는 전이 학습을 할 때 매우 일반적인 시나리오이다.
2. gradient를 추적하지 않는 연산이 더 효율적이기 때문에, forward 단계만 수행할 때 연산 속도가 향상된다.
짚고 넘어가야 할 PyTorch의 특징
PyTorch에서 DAG(Directed Acyclic Graph)들은 동적(dynamic)이다.
주목해야 할 점은 그래프가 처음부터 다시 생성된다는 것이다. 매번 .backward()가 호출되면, autograd는 새로운 그래프를 채우기 시작한다.
참고
https://tutorials.pytorch.kr/beginner/basics/autogradqs_tutorial.html?highlight=detach
'인공지능' 카테고리의 다른 글
PyTorch로 GAN을 만들 때 detach()를 사용하는 이유 (0) | 2022.10.27 |
---|---|
초거대 AI란 무엇인가? (1) | 2022.10.27 |
Multi-Modal (멀티 모달) AI (1) | 2022.10.26 |
Semantic segmentation에서 입력 데이터 전처리 하는 방법 (1) | 2022.10.25 |
Convolutional Neural Networks 기초 (0) | 2022.10.25 |