반응형
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() # 벡터 내 값들의 평균을 낸 뒤 역전파 수행