파이토치에 관해 관심이 생겨 공부를 하는 중, nn.CrossEntropyLoss()를 구현하려고 합니다.
그러나 학습이 custom loss를 사용하였을때 진행되지 않아 질문드립니다.
dataset은 kaggle cat dog dataset 이고,
개발환경은 vscode jupyter,
GPU는 GTX1050 ti 입니다.
cross entropy 구현에 참고한 링크는
CrossEntropyLoss — PyTorch 1.12 documentation 이며,
해당사진은 nn.CRELoss이며,
해당 사진은 제가 구현한 loss입니다.
예제의 값은 똑같이 나온다고 생각하여, loss를 대체하여 학습을 진행하였습니다.
해당사진은 model 학습에 사용된 custom loss function입니다.
해당사진은 dataset 구축 부분입니다.
해당사진은 모델 학습 부분입니다.
특이사항으로는 제가 구현한 loss에서는 target이 one hot encoding을 하고 넘겨져야 합니다.
custom loss의 backward를 실행하기 위해선 requires_grad 가 True 가 되야 한다고 해서 추가했습니다.
결과는
custom loss 를 사용하였을경우
loss가 0.42515 … 의 값에서
아주 조금씩 감소 하거나 값이 그대로 유지됩니다.
nn.cross entropy를 사용하였을 경우는
아래와 같습니다.
또한 정상적으로 학습이 진행되는것 같습니다.
일반적인 프로젝트였다면, nn.crossEntropyLoss를 사용했을테지만,
제가 관심있는 논문이 custom loss를 사용한 부분이 있어,
custom loss의 구현에 대해 어느정도 숙지를 해야 된다고 생각합니다.
개인 학습을 위해서 custom loss를 구현하는데, 무슨차이가 있어서 학습이 되지 않는지 궁금하여 질문드립니다.