Deep Learning/Programming2 PyTorch Inplace Operation Error 해결 Backward에서 NaN이 발생하거나 아래와 같은 에러 메시지를 띄우며 RuntimeError이 발생하는 경우가 있다. RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation 해당 에러의 의미는 inplace operation이 있어 gradient를 계산하는 데 문제가 생겼다는 것이다. 보통 새로운 주소값을 가지는 텐서를 만들어주지 않고 텐서의 값 자체를 바꾸는 연산을 했을 때 발생한다. 그런데 여기서 주의해야 할 점은 +=이나 -=와 같은 Python 연산자들 모두 inplace operation이라는 것이다. 에러를 방지하려면 모두 풀어서 써주어야 한다. x .. 2022. 1. 14. PyTorch NaN Loss/Output 해결하기 원인이 되는 연산 찾기먼저 torch.autograd 함수 중에 NaN loss가 발생했을 경우 원인을 찾아주는 함수가 있다.autograd.set_detect_anomaly(True)학습 코드에 위 코드를 추가해주고 실험을 하면, NaN loss가 발생하는 즉시 실행이 멈추고 NaN을 유발한 라인을 출력해준다. 주로 division by zero나 매우 작은 값에 대한 log 연산이 NaN loss를 유발한다. NaN은 loss 연산 뿐만 아니라 forward 연산, backward 연산에서도 발생할 수 있으므로 직접 찾으려면 힘든데, 위 코드를 쓰면 간편하다. 연산 수정하기나누는 연산이 있는데 divisor가 0이 될 수 있는 경우라면, 예외 처리를 해주거나 divisor에 1e-6 등 연산에 영향을.. 2022. 1. 5. 이전 1 다음