Python/Debugging

파이토치 RuntimeError: grad can be implicitly created only for scalar outputs 해결법

jimmy_AI 2022. 4. 23. 12:36
반응형

Pytorch loss.backward() 과정 에러 디버깅

파이토치에서 모델 학습 과정 내 backporpagation을 시도하는 도중,

RuntimeError: grad can be implicitly created only for scalar outputs

라는 오류 메시지가 출력되었습니다.

loss.backward() # 여기서 오류 발생

 

 

오류 원인

loss.backward() 과정은 기본적으로 1개의 스칼라 데이터에 대한 역전파를 수행합니다.

 

그러나, loss 변수 내에는 배치 내 데이터 각각에 대한 손실 함수 점수들이

벡터 형태로 저장된 점을 확인했습니다.(아래는 3개의 데이터에 대한 loss 점수 예시입니다.)

print(loss)
# tensor([1.5054, 1.3475, 1.0413], device='cuda:0', grad_fn=<NegBackward0>)

 

 

오류 해결 방법

배치 내 데이터들에 대한 loss를 모아서 역전파를 수행하는 경우,

해당 손실 함수 점수 값들의 평균을 구해서 역전파를 진행하면 되므로

아래와 같이 코드를 수정해주시면 됩니다.

loss.mean().backward() # 벡터 내 값들의 평균을 낸 뒤 역전파 수행