【发布时间】:2017-11-17 12:17:41
【问题描述】:
:)
大家好。
现在,我正在使用 tensorflow 进行 Multi-hot 分类。
如果使用 softmax_cross_entropy_with_logits,损失函数会增加(例如 loss: 50 -> loss: 190000 -> loss: 2138712811 -> ...)。
因此,我想澄清一下softmax_cross_entropy_with_logits的机制。
我认为下面的python代码可以模仿softmax_cross_entropy_with_logits。
def imitation_SCEwL(logits, labels):
_y = tf.nn.softmax(logits)
_y = tf.clip_by_value(_y, 1e-10, 1.0)
cross_entropy = -( labels * tf.log(_y) )
cross_entropy = tf.reduce_sum(cross_entropy, 1, keep_dims=True)
cross_entropy = tf.reduce_mean( cross_entropy )
return cross_entropy
但是,正版(在 tensorflow 中实现)和上面的代码之间的行为是不同的。
使用上面的代码,损失函数收敛。
为什么? 我只更改下面的代码。
def loss_softmax_cross_entropy_with_logits(logits, labels):
_y = tf.nn.softmax_cross_entropy_with_logits(logits, labels)
cross_entropy = tf.reduce_mean(_y)
return cross_entropy
【问题讨论】:
标签: python tensorflow softmax