Computer Science/DL, ML

케라스(Keras)에서 모델 학습 중 loss가 nan으로 나오는 문제, 예측 값이 nan으로 나오는 문제

TwinParadox 2020. 3. 4. 14:32
728x90

어떤 국내 논문 하나를 구현해보면서 Keras를 활용해서 선형 회귀(Linear Regression) 모델을 만들었다. 분명 다른 모델들을 만들 때도 이와 동일하게 만들어서 작성을 했는데도 loss가 nan이 나오고 예측 값도 nan이 나오는 문제가 있었다. 혹시나 싶어 np.mean을 사용해서 평균 값도 찍어봤는데, 이 역시도 nan이 나왔다.

 

데이터 타입이 혹시 다른 게 들어가서 그런 것인지, 중간에 무언가가 비었는지 체크해봤지만 아무 문제가 없었지만, 우우여곡절 끝에 해결 방법을 찾았다.

 

 

astype을 사용해서 데이터 타입을 변경했다.

X라는 데이터가 있으면 그냥 X=X.astype(float)로 변경해주면 해결됐다.

 

 

어디까지나 추정이지만, 오버플로우 같은 게 발생해서 나타난 문제 같다.

데이터 사이즈가 크다 보니까 pandas의 read_csv를 이용해 csv 파일을 읽어올 때 각 데이터의 타입을 매우 빡빡하게 지정을 해서 가져왔는데, 예측값 생성 과정이나 loss 계산 과정에서 지정된 타입의 값보다 더 큰 값이 들어가면서 nan이 발생한 것 같다.

 

사실, 이 부분에 대해서는 어떤 게 정확히 문제인지는 모르겠다. 정말 float16으로 지정해둔 데이터를 astype으로 타입을 float로 지정해준 것 외에는 다른 게 없기 때문에 이 부분이 문제이지 않았나 싶다.

 

데이터 타입을 조금 크게 잡아주니까, np.mean()의 출력 결과도 잘 나오고, 모델 학습 과정에서 loss가 nan이 되는 문제 같은 것도 다 해결됐다.

728x90
728x90