[Tensorflow] Nan in summary histogram for

    에러 내용

    Traceback (most recent call last):

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1323, in _do_call

        return fn(*args)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1302, in _run_fn

        status, run_metadata)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 473, in __exit__

        c_api.TF_GetCode(self.status.status))

    tensorflow.python.framework.errors_impl.InvalidArgumentError: Nan in summary histogram for: layer1/weight_1

    [[Node: layer1/weight_1 = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](layer1/weight_1/tag, layer1/weight/read)]]


    During handling of the above exception, another exception occurred:


    Traceback (most recent call last):

      File "C:/Project/AI/SAI/02. PySource/pi-work/PIAnalClass.py", line 108, in <module>

        summary, _ = sess.run([merged_summary, train], feed_dict={X: input, Y: output})

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 889, in run

        run_metadata_ptr)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1120, in _run

        feed_dict_tensor, options, run_metadata)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1317, in _do_run

        options, run_metadata)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1336, in _do_call

        raise type(e)(node_def, op, message)

    tensorflow.python.framework.errors_impl.InvalidArgumentError: Nan in summary histogram for: layer1/weight_1

    [[Node: layer1/weight_1 = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](layer1/weight_1/tag, layer1/weight/read)]]


    Caused by op 'layer1/weight_1', defined at:

      File "C:/Project/AI/SAI/02. PySource/pi-work/PIAnalClass.py", line 73, in <module>

        w_hist = tf.summary.histogram("weight", W)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\summary\summary.py", line 192, in histogram

        tag=tag, values=values, name=scope)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_logging_ops.py", line 187, in _histogram_summary

        "HistogramSummary", tag=tag, values=values, name=name)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper

        op_def=op_def)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2956, in create_op

        op_def=op_def)

      File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1470, in __init__

        self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access


    InvalidArgumentError (see above for traceback): Nan in summary histogram for: layer1/weight_1

    [[Node: layer1/weight_1 = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](layer1/weight_1/tag, layer1/weight/read)]]


    텐서플로우로 학습을 진행하는 도중, 위와같은 에러가 발생하였다. 보통 학습중에 Nan이 발생할 때 Learning Rate와 epochs를 적절히 수정하면 되어서, 기존 Learning Rate, 0.01을 0.005로 변경하고 다시 돌렸으나 변함없이 Nan이 발생하였음.



    에러로그를 자세히 보니, 텐서보드에서 나는 것으로 보이고, 다른 사람들 컴에는 정상적으로 돌아가는 것을 보니 현재 내 컴터에 너무 많은 리소스가 잡혀져 있다고 판단하여 불필요한 창을 닫고 다시 돌리기로 함


    InvalidArgumentError (see above for traceback): Nan in summary histogram for: layer1/bias_1

    [[Node: layer1/bias_1 = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](layer1/bias_1/tag, layer1/bias/read)]]


    첫번째는 weight 부분에서 에러가 발생하였지만, 두번째는 bias에서 에러가 발생하였음. 텐서보드에 값을 전달할 때 bias와 weight값들이 이상하게 전달되는 것으로 보이며, 구글링 하여 아래와 같이 조치를 취함


    AS-IS

    cost = tf.reduce_mean(-tf.reduce_sum(Y_onehot * tf.log(model), axis=1), name='cost')


    TO-BE

    cost = tf.reduce_mean(-tf.reduce_sum(Y_onehot * tf.log(model + 1e-8), axis=1), name='cost')


    위와 같이 tf.log 부분에 값을 안정화 시켜주는 1e-8이라는 값을 더해주었다. log를 계산할 때, 너무 큰 값(소수점)들을 연산할 때 cpu가 처리를 못하는 것으로 보이며 1e-8로 값의 자리를 고정하여 log를 연산하는 것으로 해결됨.



    반응형

    댓글

    Designed by JB FACTORY