반응형

안녕하세요. 

 

Deep Learning은 대표적으로 분류 문제가 있으며, CNN의 튜토리얼은 MNIST, CIFAR10 분류로 가장 많이 소개됩니다. 

이진 분류는 Sigmoid를, 그 이상의 다중 분류는 Softmax를 사용하며, Softmax를 사용하기 위해 One-hot encoding을 해야 합니다. 

Sotfmax의 가장 중요한 점은 각 Class 간의 Probabilities(확률)의 합이 '1'입니다. 정답 Class가 1에 가까워지면, 자연스럽게 오답인 Class의 Probabilities는 0에 가까워지게 됩니다. 

One-hot encoding
Softmax

하지만 Pytorch는 One-hot encoding을 하지 않습니다. Pytorch 개발자들이 최대한 사람 친화적으로 개발을 할 수 있게끔 배려를 한 것 같습니다. 

One-hot encoding

그렇다면, Target n is out of bounds. 에러문은 왜 뜨는 것일까요?

 

이유는 간단합니다. 인덱스 오류랑 원리가 같습니다.

 

대게 class가 0부터 시작하지 않고, 1부터 시작해서 

Class가 20개라면, 0~19...

Class가 15개라면, 0~14...

 

만약, Class 5개에서, 1~5라면, 해결방법도 간단합니다. 

 

Data Type이 Numpy나 Tensor라면, y_data = y_data - 1을 해주면 쉽게 해결됩니다.

728x90
반응형

+ Recent posts