작성
·
335
0
epoch를 돌리는 코드에서 loss = loss_func( y_minibatch, y_minibatch_pred) 했는데 다음과 같은 오류가 났습니다." 0D or 1D target tensor expected, multi-target not supported "
그래서 쥬피터의 원본대로 pred를 먼저하니까 정답이 나오더라구요. 구글링을 해본 결과 nn.CrossEntropyLoss()(pred, target) 계산된다고합니다.
질문1. 순서를 지켜야하는 이유가 있나요?
질문2. MSE와 BCE도 (pred, target) 순서를 지켜야하나요?
구글링을 해봤는데 정확하게 나오지는 않아서 여쭤보게 되었습니다.
감사합니다.
답변 2
1
안녕하세요. 답변도우미입니다. 두가지 문의에 대해 답변드려요~~~
정확하게 제가 이해를 한건지 살짝 애매한데요.
질문1. 순서를 지켜야하는 이유가 있나요?
순서를 지켜야 하는 이유는 PyTorch의 loss 함수들이 특정한 인자의 순서를 기대하기 때문입니다. nn.CrossEntropyLoss()
함수의 경우, 첫 번째 인자로 예측 값인 pred
를, 두 번째 인자로 실제 레이블인 target
을 받습니다. 해당 값을 사전 코드에서 적절히 변환해줘야 하기 때문에, 순서를 지켜서 순차적으로 코드를 실행해야 합니다.
질문2. MSE와 BCE도 (pred, target) 순서를 지켜야하나요?
네, 그렇습니다. 대부분의 PyTorch 손실 함수들은 (예측 값, 타겟 값) 순서를 따르고 있습니다. 예를 들어, nn.MSELoss()
와 nn.BCELoss()
함수도 같은 순서를 사용합니다. 따라서 이러한 손실 함수를 사용할 때도 그 전의 코드를 순ㅅ대로 실행시켜줘야 합니다.
감사합니다.
0