tf.nn.softmax_cross_entropy_with_logits和tf.losses.softmax_cross_entropy有什么区别,什么时候使用哪个函数??
发布于 2019-03-12 23:32:58
自从我上次使用Tensorflow以来已经有一段时间了,但我非常确定后者是前者的包装器。
tf.losses.softmax_cross_entropy只使用tf.nn.softmax_cross_entropy_with_logits来计算损失,同时允许您使用额外的功能,如类权重、标签平滑等。
tf.losses.softmax_cross_entropy还将损失添加到tf.GraphKeys.LOSSES集合中,这样您就不需要一直将其“路由”到顶部,而只需收集您的损失
losses = tf.get_collection(tf.GraphKeys.LOSSES)
loss = tf.reduce_sum(reg_losses)我个人喜欢能够个性化我的损失函数,所以我使用了"nn“函数,但是如果您不打算做任何事情,请使用tf.losses。
我也喜欢使用sparse_softmax_cross_entropy,因为大多数时候我使用的是互斥的类,这样我就可以避免自己将标签转换为一种热编码。
不同之处在于,在tf.nn.softmax中,您需要对标签使用one-hot编码,而在tf.nn.sparse_softmax_cross_entropy中,您也可以使用整数来指定标签所属的类号。不同的是
labels = [
[0, 0, 1],
[1, 0, 0],
[0, 1, 0],
]vs
labels = [2, 0, 1]最后,如果你不打算做很多低级的事情,我建议你看看Keras。
https://stackoverflow.com/questions/55125115
复制相似问题