gpt4 book ai didi

python - 即使学习率很小,当类别数量增加时,“模型因损失= NaN而发散”。 [ tensorflow ]

转载 作者:行者123 更新时间:2023-11-30 09:00:01 25 4
gpt4 key购买 nike

我有一个基于 alexnet 的网络,用于年龄分类。当我训练 8 个类别的网络时,它工作得很好,但是当我将类别增加到 60 或 100 时,我得到“'模型与损失 = NaN 发散”我已经将学习率降低到 0.00000001 甚至 0.0 ,并将浴大小降低到 1 甚至 。但没有帮助。

我的损失函数是:

def loss(logits, labels):
labels = tf.cast(labels, tf.int32) #trying to avoig log(0)
shape = [logits.get_shape()[0], 57]
epsilon = tf.constant(value=0.1, shape=shape)
logits = logits + epsilon



cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits= logits,labels= labels, name='cross_entropy_per_example')
cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy',)
tf.add_to_collection('losses', cross_entropy_mean)
losses = tf.get_collection('losses')
regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
total_loss = cross_entropy_mean + LAMBDA * sum(regularization_losses)
tf.summary.scalar('tl (raw)', total_loss)
#total_loss = tf.add_n(losses + regularization_losses, name='total_loss')
loss_averages = tf.train.ExponentialMovingAverage(0.9, name='avg')
loss_averages_op = loss_averages.apply(losses + [total_loss])
for l in losses + [total_loss]:
tf.summary.scalar(l.op.name + ' (raw)', l)
tf.summary.scalar(l.op.name, loss_averages.average(l))
with tf.control_dependencies([loss_averages_op]):
total_loss = tf.identity(total_loss)
return total_loss

知道如何解决这个问题吗?

最佳答案

另一个可以尝试的事情是改变权重的初始化,有时减小权重的大小会有所帮助。您还可以查看使用 add_check_numeric_ops 来准确调试 NaN 的来源,如本示例所示: Debugging nans in the backward pass

关于python - 即使学习率很小,当类别数量增加时,“模型因损失= NaN而发散”。 [ tensorflow ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com