티스토리 뷰
nn.BCELoss()
label이 0 또는 1인 Binary Classification을 위해서는 nn.BCELoss()를 사용할 수 있다.
이때 주의할 사항은 다음과 같다.
1. input에 sigmoid() 함수를 씌운 후에 loss function에 넣어야한다.
2. input과 target은 동일한 shape이어야 한다.
3. input과 target의 데이터 타입이 모두 Float이어야 한다.
Example:
import torch.nn as nn
loss_func = nn.BCELoss()
sigmoid = nn.Sigmoid()
input = torch.randn(size=(2, 4)) # shape: (2, 4), dtype: float32
target = torch.FloatTensor([[0, 0, 1, 0], [1, 0, 1, 1]]) # shape: (2, 4), dtype: float32
output = loss_func(sigmoid(input), target)
nn.CrossEntropyLoss()
다양한 label이 존재하는 Multi-label Classification을 위해서는 nn.CrossEntropyLoss()를 사용할 수 있다.
PyTorch 공식 문서에 따르면 Input-Target 쌍에서 다양한 shape이 가능하다.
가장 일반적으로는 input의 shape은 (batch_size, label_num), target의 shape은 (batch_size)로 구성하여 사용한다.
주의할 사항은 다음과 같다.
1. nn.BCELoss()에서와는 다르게, target이 input보다 한 차원 작아야 한다.
2. target의 데이터 타입이 Long이어야 한다. (input은 Float)
Example:
import torch.nn as nn
loss_func = nn.CrossEntropyLoss()
input = torch.randn(size=(2, 10)) # shape: (batch_size, label_num), dtype: float32
target = torch.LongTensor([9, 0]) # shape: (batch_size), dtype: int64
output = loss_func(input, target)
반응형
'AI' 카테고리의 다른 글
KL-Divergence Loss (1) | 2023.12.23 |
---|---|
[논문 리뷰] P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks (0) | 2023.08.01 |
모델의 특정 layer를 freeze시키기 (0) | 2023.02.02 |
GPU id 지정하여 학습하기 (0) | 2022.06.06 |
Neural Network 설명 및 직접 구현해보기 (0) | 2021.09.11 |
댓글