2019. 9. 28. 22:54ㆍ분석 Python/Tensorflow
여러 가지 경우의 수가 있지만 정리
1. 가중치 초기값을 selu이고, lecun uniform / lecun normal 줬을 때
====> 더 좋다고 알려진 glorot uniform / glorot normal로 수정함.
---> 실제로 바꾸고 나서 효과를 본 것 같기도 함
2. Loss 부분에 tf.reduce_sum을 했을 때 문제 발생하는 것 같음.
====> 그래서 tf.clip_by_value를 줘서 0 이상으로 주니 에러가 안 생김
3. tf.nn.loss 가 nan 발생하는 경우가 자주 있음
https://data-newbie.tistory.com/270
위와 같은 방식으로 Loss를 주는데 0.001~0.0001까지 줬을 때 도중에 nan이 발생함
====> 더 낮게 주거나, 아니면 max_norm을 주려고 하니 그런 현상이 덜 발생함.
====> 하지만 숫자현 변수밖에 없는 데이터에 적용 중인데, 자주 발생함
====> max norm과 l2를 줬는데도 동일한 현상 발생
====> Spectral Norm을 주는 방식으로 하니, 그나마 괜찮은 듯
====> 해보다 보니 가장 쉬운 방법은 selu를 leaky_relu로 바꾸면 더 이상 발생하지 않음. selu 함수 자체에 있는 어떤 특징 때문에 nan을 유발하게 되는 듯. 주로 Bias에서 발생하는 것을 확인
3. tabular data에서 GAN을 사용할 때는 neural network를 사용할 경우 배치 사이즈는 좀 크게 하는 게 좋을 듯.
실제 데이터를 스케일링(-1,1) 하다 보면 0 중심으로 보내야 할 때가 있음 이렇게 했을 때 배치 사이즈를 작게 하다 보면 0인 값들만 나오게 됐을 때 Weight가 nan이 발생하는 경우가 자주 있음.
(0,1)로 할 수 있지만 그러면 마지막에 표현할 수 있는 공간 자체가 작아지는 것 같아, 표현의 범위를 넓게 하고 싶어서 (-1,1) 주로 사용함.
>> 그냥 loss 중에서 나눠줬을 때 분모쪽에서 0이 발생해서 생기는 경우라고 추정됨
'분석 Python > Tensorflow' 카테고리의 다른 글
TensorFlow 유용한 구현 모음 (아직 테스트는 안해봄) (0) | 2019.10.27 |
---|---|
TensorFlow gpu cuda 설치 공식 문서 (Windows / Ubuntu 16.04 ,18.04) (0) | 2019.10.03 |
[ Python ] Tensorflow max norm 적용하기 (0) | 2019.09.28 |
[ Python ] TensorFlow Weight L2, L1 Normalization 쉽게하기 (0) | 2019.09.24 |
[ Python ] gumbel softmax 알아보기 (0) | 2019.09.14 |