본문 바로가기
카테고리 없음

nan

by Cash_money 2024. 5. 29.
728x90

nan

# NaN 위치에 특정한 작은 값을 삽입합니다.# NaN 값을 확인합니다.# 임의의 출력 텐서를 만듭니다. 딥러닝 추론 결과 도출된 nan 값을 0에 가까운 수로 강제로 전환 시킵니다. 아래 코드를 참고해주세요이럴 때 transform 함수를 이용해 재구성할 수 있다.원래는 데이터를 가지고 이진 분류의 형태로 결과를 출력하는 모델을 만들었기 때문에 마지막 Dense layer의 노드수를 '2'로 설정했었다. 하지만 Y를 다르게 설정하여 총 5개의 클래스로 분류하는 모델을 구축했는데, 이 마지막 출력 노드수를 변경하지 않고 그냥 모델 학습을 시켰기 때문에 loss가 nan이 나오게 된 것! 나에게 해당되는 원인은 6번이었다.6️⃣ 데이터와 outputsize가 불일치한다.그 이유를 검색해본 결과, 다음과 같은것들이 원인 & 해결방법이 될 수 있다. 모두 유효한 값이어야 한다. Normalize도 해두기Learning rate이 너무 클 경우, loss가 커지기 시작하면서 결국 발산한다.학습도중 loss가 nan이라고 뜨는 일이 발생했다. Epoch은 50이상 돌아간 상태였다. 바로 nan loss가 발생하는 이유에 대해서 검색해보았다. 대충 서치했을 때 내가 얻을 수 있는 답변들은 다음과 같았다. 다만 미싱 데이터를 그림으로 보여주기 때문에 코드 돌아가는 속도가 빠르지 않습니다.msno.matrix 미싱데이터를 시각화 해주는 함수입니다.pandas 에서 nan 값을 다른 값으로 대체하는 방법입니다. nan 값을 999 로 바꾼다고 가정합니다. 이 함수는 nan, inf, -inf 모두를 숫자값으로 바꿔버립니다. nan parameter 값의 기본값은 0입니다. numpy 에서 nan 값을 다른 값으로 대체하는 방법입니다. nan 값을 999 로 바꾼다고 가정합니다. numpy나 pandas를 이용하여 데이터를 조작할 때 nan 값을 다른 값으로 대체하는 작업은 꽤 존재합니다. 값이 NaN 인지 확인하는 방법은 다양하고, 사용하는 라이브러리마다 다를 수 있습니다. 아래는 nan 확인을 위한 몇가지 방법입니다.nan 은 nan 과 같지 않습니다. 그렇기 때문에 위 코드에서 같은 x 끼리 비교를 하더라도 결과는 동일합니다.nan 과 nan 을 비교하였을 때도 결과는 마찬가지입니다. nan 은 숫자가 아니기 떄문에 다른 숫자들과 연산이 수행되면 결과로 nan을 받게 됩니다. nan 은 float type 입니다. nan 값은 연산의 결과가 숫자로 표현될 수 없을 때 사용하기도 하지만, 단순히 값이 부재하는 경우에도 사용합니다. nan 은 IEEE 754 라 하여 부동소수점 연산에 관한 표준에서 소개되었습니다. nan 값은 부동소수점 연산 결과에서 특수한 경우를 나타내기 때문에, nan 값은 float 값의 일종입니다. IEEE 754에 의하면 0.01, 0.00034, 3.141592같은 수들과 같은 비트 표현 방식을 사용하지만, 가능한 패턴 중 특수한 경우들을 nan 이라고 부르는 것입니다. 따라서 nan도 float type의 일종입니다.NaN 값은 ‘Not a Number’ 을 뜻합니다. 숫자가 아니라는 뜻이죠. 0을 0으로 나누거나 음수의 제곱근을 구하고자 하면 정상적인 값을 얻지 못할 것입니다. 그럼에도 반환값을 받아야 하는 경우 nan 값을 받게 됩니다. Python에서는 0/0 을 수항하면 Error를 출력하는데, 다른 언어나 python의 numpy 라이브러리를 사용하는 경우 nan 값이 반환되는 것을 볼 수 있습니다.Python 에서 nan 값을 다루는 법을 알아봅니다.__

728x90