본문 바로가기

🤖딥러닝

loss값이 nan인 이유와 해결 방법

반응형

 

00. loss값이 nan???

딥러닝 모델을 학습시키는데, 그 결과가 loss:nan / sparse_categorical_accuracy:0.000e+00이 나왔다. 이건 정말이지 듣도 보도 못한 결과!?!?!?!?!? 띠용....💁🏻‍♀️❓혹시나 다음에도 이러한 상황이 발생할 수 있기 때문에 기록해두는 loss값이 nan이 나온 이유와 해결방법!!

 

 

01. 원인 추정

loss가 어떻게 nan이 나오지??? 이를 해결하기 위해

그 이유를 검색해본 결과, 다음과 같은것들이 원인 & 해결방법이 될 수 있다.

 

1️⃣ input data에 nan이 껴있다. -> df.isnull( ).any( )로 확인해보자

2️⃣ 데이터 타입을 float로 변경해보자

3️⃣ learningrate가 너무 높아서 그럴 수 있다.

4️⃣ 옵티마이져(Optimizer)를 바꿔보자

5️⃣ 특성 스케일 방법을 바꿔본다 -> ex. (0,1)을 (-1,1)로

6️⃣ 데이터와 outputsize가 불일치한다.

 

 

 

02. 문제 해결

위의 원인들을 하나씩 대입해가면서 해결해본 결과,

나에게 해당되는 원인은 6번이었다.

즉, 데이터와 output size가 맞지 않았던 것인데,

원래는 데이터를 가지고 이진 분류의 형태로 결과를 출력하는 모델을 만들었기 때문에 마지막 Dense layer의 노드수를 '2'로 설정했었다. 하지만 Y를 다르게 설정하여 총 5개의 클래스로 분류하는 모델을 구축했는데, 이 마지막 출력 노드수를 변경하지 않고 그냥 모델 학습을 시켰기 때문에 loss가 nan이 나오게 된 것!

 

 

 

따라서 마지막 Dense layer의 노드수를 내가 예측하고자 하는 클래스 수인 '5'로 변경하고 다시 모델을 학습시켰을 때 loss값이 nan이 아닌 정상적으로 나오는 것을 확인하였다.(다만... accuracy는 무슨 일..ㅎ..)

 

아무튼, 꽤나 당황스러웠던 loss nan... 일단 해결!

 

 

반응형