brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Apr 17. 2020

Happen To NaN

Keras Loss == NaN

텐서플로-케라스


모델링을 하면서 혹시 Loss 값에 nan을 본적이 있는가.


단순한 네트워크 계층에서는 쉽게(?) 관찰 할 수 없지만,

조금 복잡한 네트워크(특히, Conv2D + Embedding)에서 가끔 볼 수 있다.


왜? 어떻게 이런 값이 나타나는 것일까?


필자의 경우에는,

activation 함수의 임계값을 넘어가는 경우에 Loss 값이 갈피를 못잡고

갑자기 nan이 나타났다.


activation에 보통 leaky_relu, relu, tanh 등등을 사용한다.


사실 어떤 값을 사용해야 하는지, 내 모델에서는 어떤 값이 더 좋은 효율을 낼 수 있는지에 대해서는 누구나 고민해 보았음직하다.


activation의 중요성을 다시 한 번 깨닫는다.


하지만!

activation 만으로 완벽한 해결이 될 수 없는 경우도 있다.


이떄는,

각 Layer 계층의 학습 가능한 파라미터 수를 확인하고

해당 계층의 활성화 함수(Kernel, Bias, Activation Regularizer)를 실험해 보야야 한다.


예을 들어,


tf.keras.layers.Embedding(len(space_idx.index), num_outputs, trainable=True,

                                            embeddings_initializer='glorot_uniform',

                                            activity_regularizer=tf.keras.regularizers.l2(l=0.001),

                                            embeddings_regularizer=tf.keras.regularizers.l2(l=0.001),

                                            name='space_vector')



에를 들어 * 2,


conv2d_layer = tf.keras.layers.Convolution2D(filters=128, kernel_size=(1, 200), strides=(1, 2), padding='same',  kernel_regularizer=tf.keras.regularizers.l2(l=0.001), use_bias=False)(tf.keras.backend.expand_dims(space_vector, 1))



늘... 생각하지만

참 어렵다.

작가의 이전글 TF-KERAS: 행렬곱, 그리고 추천
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari