Pytorch Softmax Classificaton 을 통한 N개의 이벤트 분류하기
모두를 위한 딥러닝 - 파이토치 강의 참고
binary classificaton 문제를 해결할 때 sigmoid함수를 사용했습니다.
정확히는
F.binary_cross_entropy
안에 sigmoid함수가 같이 녹아있는 형태로 loss함수를 사용했습니다.하지만, 세개 이상의 분류문제를 해결하기 위해서는
sigmoid
함수가 아닌softmax
함수를 사용해야 합니다.softmax함수는 아래와 같은 식으로 나타낼 수 있습니다.
K개의 입력값을 0~1 사이의 값이 되도록 K개의 SUM으로 나눠주게 됩니다. 따라서 모든 확률의 합은 1이됩니다. 또한 입력값의 순서가 출력값의 순서와 같음을 확인할 수 있습니다.
이제 Pytorch를 통해 SoftmaxClassifierModel을 정의해 보았습니다.
1 | # 모델 정의 |
모델을 정의한 내용을 보면 입력값X에 따른 Linear함수만을 통과하고 Softmax함수를 통과하지 않는것을 볼 수 있습니다.
이는 loss함수에서 사용하게 될
F.cross_entropy
에 Softmax함수가 포함되어 있기 때문입니다.따라서 정의한 모델에서는 Softmax를 통과하기전의 Linear함수를 통과한 output값을 되돌려줘야 합니다.
optimizer를 정의하고,
1 | # optimizer 정의 |
- 정한 epoch수 만큼 학습하며 loss를 출력해봅니다.
1 | epochs = 1000 |
- 출력된 loss를 통해 모델이 정상적으로 학습되는것을 확인할 수 있습니다. 이처럼 N개의 이벤트를 분류할 경우는 Softmax함수를 두개의 이벤트를 분류할 경우는 Sigmoid함수를 사용한다는것을 배울 수 있었습니다.