如何解决如何使用Tensorflow获得两个分布的交叉熵?
在TensorFlow中,我们有tf.nn.softmax_cross_entropy_with_logits
,它仅允许您使用预测的对数和金标索引(一次性使用)。但是,有时我们想计算两个分布的交叉熵,即,黄金标准不是一时的。我怎样才能达到这个目的?
解决方法
实际上tf.nn.softmax_cross_entropy_with_logits
并没有限制labels
必须是热编码的,因此您可以继续使用非单热label
向量。您可能会将此与{em> 施加此限制的tf.nn.sparse_softmax_cross_entropy_with_logits
混淆。
对于问题的另一部分–如果您要计算张量p
和q
中的两个归一化分布之间的交叉熵,可以确保使用{ {1}},这样您为tf.math.xlogy
和x=0
得到的零。因此,假设y=0
和p
是两个张量,它们表示轴q
上的归一化分布–
1
另一方面,您实际上有一些由模型输出的ce = - tf.reduce_sum(tf.math.xlogy(p,q),axis=1)
(而不是根据对数计算出的归一化分布logits
)。在这种情况下,最好通过应用logit的log-softmax来计算交叉熵
q
(从而避免了numerical instability显式计算softmax分布,然后立即取其对数)。在典型的ML设置中,ce = - tf.reduce_sum(p * tf.nn.log_softmax(logits,axis=1),axis=1)
是您的“标签”,而p
和q
是模型的输出。请注意,这对于非单标签logits
来说很好用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。