Softmax交叉熵损失爆炸

时间:2018-02-27 19:43:28

标签: python tensorflow machine-learning deep-learning conv-neural-network

我正在为像素分类创建一个深度卷积神经网络。我正在使用adam optimizer,softmax和cross entropy。

Github Repository

我问了一个类似的问题here,但我给出的答案并没有导致我解决问题。我还有一个更详细的图表,说明它出了什么问题。每当我使用softmax时,都会出现图中的问题。我做了很多事情,比如调整训练和epsilon率,尝试不同的优化器等等。损失从未减少到500以上。我现在不会改变我的数据。使用sigmoid代替softmax导致不会发生此问题。但是,我的问题有多个类,所以sigmoid的准确性不是很好。还应该提到的是,当损失很低时,我的准确率只有80%左右,我需要比这更好。 为什么我的损失会突然飙升?enter image description here

x = tf.placeholder(tf.float32, shape=[None, 7168])
y_ = tf.placeholder(tf.float32, shape=[None, 7168, 3])

#Many Convolutions and Relus omitted

final = tf.reshape(final, [-1, 7168])
keep_prob = tf.placeholder(tf.float32)
W_final = weight_variable([7168,7168,3])
b_final = bias_variable([7168,3])
final_conv = tf.tensordot(final, W_final, axes=[[1], [1]]) + b_final

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=final_conv))
train_step = tf.train.AdamOptimizer(1e-5).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(final_conv, 2), tf.argmax(y_, 2))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

1 个答案:

答案 0 :(得分:0)

不确定,它到底是什么引起的。我有几次相同的问题。通常有一些帮助:您可能会降低学习率。 Adam的学习速率的界限(例如1e-5到1e-7左右)或尝试随机梯度下降。亚当试图估算可能导致不稳定训练的学习率:请参阅Adam optimizer goes haywire after 200k batches, training loss grows

一旦我也删除了batchnorm,它实际上起到了作用,但这是针对“特殊”设计的笔划数据(点序列)网络,对于Conv1d层来说,它并不是很深。