본문 바로가기
Error Note

RuntimeError: grad can be implicitly created only for scalar outputs

by ga.0_0.ga 2023. 1. 30.
728x90
반응형
반응형

- 전체 에러 문구

RuntimeError: grad can be implicitly created only for scalar outputs

파이토치에서 모델 학습 중 backporpagation을 시도하는 도중에 발생하는 에러입니다. loss.backward()는 기본적으로 1개의 스칼라 데이터에 대해 backporpagation를 수행하도록 되어있습니다. 그러나, loss 변수 내에는 배치에 포함된 모든 데이터 각각에 대한 loss 가 저장되어 있습니다. 이 값들을 sum이나 mean을 통해 하나로 합쳐주어야 합니다. 

- 해결 방법

배치 안에 포함된 모든 데이터들에 대한 loss를 모아서 역전파를 수행해야하기 때문에, sum이나 mean을 통해서 값을 하나로 만들어 주면 됩니다. loss함수에 인자로 reduction='mean'또는 reduction='sum'을 추가하면 해결할 수 있습니다.

self.loss(logits, relation_labels.view([-1,1]).float(), alpha=0.75, reduction='mean')
 
728x90
반응형

댓글