tensorflow.nn.softmax实现方式

在使用TensorFlow训练模型时遇到损失(loss)变为NaN的问题,怀疑与softmax归一化后对0取对数有关。通常softmax计算会减去序列最大值以避免0导致的对数问题。虽然在查看源码时未直接发现该操作,但根据文档注释和实际测试,证实tf.nn.softmax确实执行了减去序列最大值的步骤,确保数值稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跑模型的时候遇到loss为nan的情况,图里面有对softmax归一化后的值取对数的操作,担心是这里算出来0。一般softmax的计算会减去序列的最大值。即

 tf.exp(logits - tf.reduce_max(logits))  / tf.reduce_sum(tf.exp(logits - tf.reduce_max(logits)))

但是看tf源码没看懂哪里在做这个运算,但是注释文档里写的这样算的:

def softmax(logits, dim=-1, name=None):
 '''
    Computes softmax activations.
    This function performs the equivalent of

    softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), dim)
  '''

不敢相信,毕竟减序列最大值是常规操作,所以测了一下看到底是怎么算的。

(Pdb) x = [1.0,1.0, 100.0]

(Pdb) y = sess.run([(tf.exp(x-tf.reduce_max(x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值