训练 CNN 时大输入的 Tensorflow 熵为 NaN

标签 tensorflow deep-learning convolution entropy cross-entropy

我使用 TensorFlow 创建了一个简单的卷积神经网络。 当我使用边缘 = 32px 的输入图像时,网络工作正常,但如果我将边缘增加两倍到 64px,则熵 retutrs 为 NaN。问题是如何解决这个问题?

CNN 结构非常简单,如下所示: 输入->卷积->pool2->卷积->池2->卷积->池2->fc->softmax

熵的计算方式如下:

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))

对于 64px 我有:

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

对于 32px,它看起来不错并且训练给出结果:

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

最佳答案

据我所知,当您计算log(0)时,会发生NAN。我也遇到了同样的问题。

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

您可以通过在预测中添加一点噪音来避免这种情况( related 1related 2 )。

tf.log(prediction + 1e-10)

或者使用tensorflow中的clip_by_value函数,它定义传递张量的最小值和最大值。像这样的东西(Documentation):

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

希望有帮助。

关于训练 CNN 时大输入的 Tensorflow 熵为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38608159/

相关文章:

python - 如何正确使用 Keras LSTM batch_input_size

tensorflow - 我可以将 tf.map_fn(...) 应用于多个输入/输出吗?

python-3.x - 更改数据表示后维度不匹配 "LabelBinarizer "

C++ : how can I fourier transform an array into an other array of different size using fftw3

image-processing - FFT 卷积 - 非常低的 PSNR

python - 缺少数据的python中的二维卷积

python - tensorflow 错误 : unsupported callable - (from ex ? ??)

python - 加速初始 TensorFlow 启动

python - 验证准确率在达到 90% 后没有提高

python - 使用 Keras 的卷积神经网络中始终进行相同二元类预测的原因和可能的解决方案是什么?