- Not a Number라는 뜻으로, Python의 notation 중 하나이다.
- 이게 보이면 원인을 찾아서 해결하는 것이 좋다.
- 보통 Infinity value로 인해 생겨난다.
- NaN과 연관된 연산은 죄다 NaN이 되므로 골치아프다.
- zero devide by zero (0/0)
- Infinity devide by Infinity (Inf/Inf)
- Inf-Inf, -Inf-Inf, -Inf+Inf (Inf+Inf = Inf)
- zero multiplied by Infinity, Infinity multiplied by zero (0*Inf, Inf*0)
- x<0, sqrt(x)
- x=Inf or y=0, fmod is floating-point remainder, fmod(x,y)
0 * something, 0/0은 수학적으로는 0이지만,
Python에서는 NaN이라고 한다...
- Pytorch에서 NaN 또는 Inf를 체크하는 방법은 다음과 같다.
assert not torch.isnan(x).any()
assert not torch.isinf(x).any()
- x라는 Tensor의 element 중, 하나라도 isnan/isinf를 만족하는 경우 true가 되므로, assert로 잡아내기 위해 not을 표시한다.
- torch에서 autograd(backward) 과정에서 detecting anomaly로 사용된다.
- 또한 NaN과 NaN은 다르다. (x=np.nan, x!=x 는 True를 반환)