1

TensorFlow를 사용하여 간단한 컨볼 루션 뉴런 네트워크를 만들었습니다. edge = 32px 인 입력 이미지를 사용할 때 네트워크는 정상적으로 작동하지만 64px로 두 번 가장자리를 늘리면 엔트로피 retutrs가 NaN으로 증가합니다. 문제는 그것을 고치는 방법입니다.CNN을 교육 할 때 큰 입력에 대한 NaN의 Tensorflow 엔트로피

CNN 구조는 매우 간단하고 다음과 같습니다 입력 -> conv-> pool2-> conv-> pool2-> conv-> pool2-> FC-> softmax를

엔트로피 같이 계산한다 :

64px에 대한
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))  # loss 
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) 
train_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(ys, 1)) 
train_accuracy = tf.reduce_mean(tf.cast(train_pred, tf.float32)) 

내가 가진 : 32px에 대한

train_accuracy=0.09000000357627869, cross_entropy=nan, test_accuracy=0.1428571492433548 
train_accuracy=0.2800000011920929, cross_entropy=nan, test_accuracy=0.1428571492433548 
train_accuracy=0.27000001072883606, cross_entropy=nan, test_accuracy=0.1428571492433548 

이 잘 외모와 훈련 결과를 제공합니다

01 당신이 로그 (0)을 계산할 때
train_accuracy=0.07999999821186066, cross_entropy=20.63970184326172, test_accuracy=0.15000000596046448 
train_accuracy=0.18000000715255737, cross_entropy=15.00744342803955, test_accuracy=0.1428571492433548 
train_accuracy=0.18000000715255737, cross_entropy=12.469900131225586, test_accuracy=0.13571429252624512 
train_accuracy=0.23000000417232513, cross_entropy=10.289153099060059, test_accuracy=0.11428571492433548 

답변

0

23,516,는 지금까지 내가 아는 한, NAN 일이. 나는 똑같은 문제가 있었다.

tf.log(prediction) #This is a problem when the predicted value is 0. 

하면 예측 (related 1, related 2)에 작은 잡음을 추가함으로써이를 방지 할 수있다.

tf.log(prediction + 1e-10) 

또는 tensorflow에서 clip_by_value 함수를 사용한다면, 전달 텐서에 대한 최소 및 최대 값을 정의한다. 이런 식으로 뭔가 (Documentation) :

tf.log(tf.clip_by_value(prediction, 1e-10,1.0)) 

그것이 도움이되기를 바랍니다.

+1

정말 고마워요, 당신 말이 맞아요. 소음이 도움이됩니다. – Verych