다른 개인 프로젝트를 하던 도중에 Pytorch 에러가 발생했다. 분명한 에러 발생 이유를 확인을 못해 이를 정리하고 기록해두고자 Ext (Extra의 앞에 세글자만 따서 Ext) 를 작성한다.
에러문은 다음과 같다
RuntimeError: 0D or 1D target tensor expected, multi-target not supported
에러를 보아 target tensor
가 입력된 텐서와 올바르지 않다는 것으로 확인이 되는데 Softmax 함수에서 다음과 같은 에러가 발생하였다. 기본적으로 Softmax 함수가 어떻게 Pytorch 내에서 활용이 되는지 부터 짚고 넘어가야 할거 같다.
Pytorch 공식 API 문서 에서는 Softmax를 아래와 같이 정리 하였다.
Applies the Softmax function to an n-dimensional input Tensor rescaling them so that the elements of the n-dimensional output Tensor lie in the range [0,1] and sum to 1.
Softmax is defined as:
는 input 이다. 는 output 다시 말해 Softmax의 와 같다고 생각해도 될 거 같다. 정규분포를 거쳐서 전체의 합이 1이 되도록 하는 것이 Softmax이다. input 값의 정규분포를 전체 x의 값의 합에 절반을 하여 확률적인 검출기가 만들어지는 것이다.
그러면 이는 몇 차원의 값을 뱉어내는 것인가? 이게 나의 두번째 궁금증과 해결해야할 부분인 것 같다. 위에서 에러가 난 이유 또한 차원의 오류 문제이다.
1차원을 입력 값으로 받게 된다. 즉, 의 차원은 기본적으로 1차원이다. 그러면 당연히 1차원이 나오게 되지 않을까 싶은데 점점 헷갈리기 시작한다.
1차원에서의 Softmax는 각 시그널에 대한 특성값에 확률이 될 것이다. 마찬가지로 2차원에서의 Softmax는 각 픽셀의 특성값에 대한 확률이 될 것이다. 에러가 난 내용을 다시 보자.
RuntimeError: 0D or 1D target tensor expected, multi-target not supported