[PyTorch] Softmax + CrossEntropyLoss
·
코딩/이슈
Softmax 두번 쓰는 경우... 자칫 분석이 잘못 될 수도 있습니다..!문제다중 분류문제에서 보통 손실함수로 `CrossEnropyLoss`를 사용합니다. 이 함수는 보통 모델의 아웃풋 로짓값을 인풋으로 받게끔 구현되어있습니다. 만약 이 로짓에 `softmax`를 적용하여 `CrossEnropyLoss`에 집어넣으면 조금 왜곡된 결과가 나오겠죠..? 그런데 정말 조심해야하고 재미있는점은, 코드는 돌아가며 오류 경고가 뜨지않는 문제라는 점이고, 그 이상한 결과가 `아주 약간`만 이상해 보일 수 있다는 것입니다. 예를들어, 정상적으로 손실함수에 로짓을 집어넣은 모델의 `F1 macro score`가 `0.8` 이라하면, 위와같은 처리를 한 뒤의 결과는 `0.8`과 비슷하거나 별다른 문제가 없을 가능성이 ..
[PyTorch] MultilabelAUPRC
·
코딩/이슈
`pytorch`를 사용하면 메트릭을 계산할 때에 저는 주로 `torchmetrics`를 사용합니다. 실험 조건이나 데이터의 상태에 따라 여러 메트릭이 필요한데, `torchmetrics`에는 부족함 없이 구현되어있기 때문입니다. 그런데 신기하게도 멀티라벨 에서의 `AUC-PR`은 없습니다. 저 메트릭을 위해 조사하다 `torcheval`이라는 라이브러리를 찾았습니다. 기본적으로 `torchmetrics`과 매우 유사하지만, `AUC-PR`이 구현되어 있습니다. 함수 불러오는것 까지는 `torchmetrics`과 똑같은데, 함수형으로의 구현은 안되어있는듯 합니다. 멀티라벨 이다보니 기본적으로 prediction & real target 모두 벡터가 아닌 원핫인코딩 된 행렬로 넣으면 됩니다.>>> impo..
[EarlyStopping] 변수설정 실수
·
코딩/이슈
`Early Stopping`을 처음 사용했을 때의 이야기입니다. 최근 똑같이 실수해서 메모합니다. K-폴드 교차검증을 하는 경우, 저는 폴드 인덱스를 for 문에 넣어 전반적인 성능을 확인합니다. 이 방법은 보다 일반적인 결과를 낼 수 있어 좋지만, 아무래도 시간을 많이 잡아먹습니다. 그러다 학부때 `Early Stopping`을 알게되어 교차검증에 사용해 보았는데, 이게 웬걸... 빠르긴 한데, 첫번째 폴드만 성능이 제대로 나오고, 나머지 성능은 말도 안되게 낮게 나왔습니다.더보기 참고`Early Stopping`은 불필요한 학습을 줄여, 과적합을 방지하는 매우 유용한 머신러닝 기법입니다. 보통 아래와 같은 방식으로 작동합니다.모니터링 대상 설정: 특정 성능 지표(예: val_loss, val_acc..
[PyTorch] 모델 평가시 주의, trainloader shuffle
·
코딩/이슈
너무 자주 실수해서 적습니다...일반적으로 학습시 trainloader에서 `shuffle=True` 옵션을 사용하면, 매 epoch마다 데이터를 무작위로 섞어서 모델에 제공하게 됩니다. 이 방법은 모델이 특정 순서에 의존하지 않고 데이터를 학습하도록 도와줍니다. 특히, 순차적인 데이터 구조를 가진 경우에 효과적으로 모델이 더 일반화된 패턴을 학습할 수 있도록 하는 것이 목적입니다. 하지만 평가(evaluation) 시에는 `shuffle=True`를 사용하지 않는 것이 일반적입니다. 이유는 평가 과정에서 데이터는 고정된 순서로 제공되어야 하며, 섞는다면 무작위의 결과가 나와 혼란을 야기할 수 있습니다. 저는 모델 가중치를 저장하고 검토겸 잘 불러와지는지 불러오고 train부터 test까지 다시 pred..
[pandas] 피쳐엔지니어링 주의: 더미코딩 순서
·
코딩/이슈
아주아주 간단한건데, 너무 자주 까먹어서 메모겸 올립니다.더미코딩을 사용하는 분류문제에서 종종 예기치 못한 차원 에러가 생깁니다. 예를들면 다음과 같습니다.ValueError: shapes (1,1) and (3,) not aligned: 1 (dim 1) != 3 (dim 0) 데이터를 나눈 다음에 더미코딩을 하여 차원이 달라져 생긴 문제입니다. 특히 카테고리수가 많고, 심각한 약소 카테고리가 존재하여 나뉘어진 데이터셋에 해당 카테고리가 등장하지 않는 경우의 일입니다. 종종 어떤 문제들은 구조적으로 데이터 나누기를 먼저하도록 강제하기도 합니다. 예를들어,같은 모델을 사용하는데, 조건을 다르게하여 실험할 때에, 조건마다 데이터 나누는 방식이 달라질 때가 있습니다. 조건 1에서는 랜덤으로 나누고, 조건 2..
[PyTorch] torchmetrics: Multiclass vs. Multilabel F1-score
·
코딩/이슈
Multiclass vs. Multilabel분류문제에서 multiclass와 multilabel 문제는 종종 혼용되는 용어지만, 분명 다른 의미를 갖습니다. 먼저 multiclass의 경우, 이진 분류가 아닌 일반적인 분류 문제를 생각하시면 됩니다. 예를들어, 고양이, 개 그리고 닭의 이미지를 구별하는 문제가 이에 해당됩니다. 각각의 샘플은 무조건 하나의 라벨을 갖는다는 특징이 있으며, 이를 조금 어려워 보이는 말로 `상호 배타적인 (Mutually exclusive)` 라벨을 갖는다고 합니다. 반대로 multilabel의 경우, 마찬가지로 고양이, 개 그리고 닭의 이미지를 구분하는 상황이지만, 하나의 이미지에 여러 라벨이 등장 가능한 경우입니다. 위의 예시로 보자면, 고양이, 개 그리고 닭이 동시에 ..