인프런 커뮤니티 질문&답변

홍준표 joon.vv님의 프로필 이미지
홍준표 joon.vv

작성한 질문수

처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]

Multi-Calss Classfication 딥러닝 적용해보기 (IRIS 분류 문제)

09.simple_actual_example_multi_label_calssification에서 loss함수에 대해서 질문이 있습니다.

작성

·

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

감사합니다^^

홍준표 joon.vv님의 프로필 이미지
홍준표 joon.vv

작성한 질문수

질문하기