在使用 TensorFlow 一段时间后,我阅读了一些 Keras 教程并实现了一些示例。keras.losses.binary_crossentropy
我找到了几个用作损失函数的卷积自动编码器教程。
我认为不binary_crossentropy
应该是多类损失函数,并且很可能会使用二进制标签,但实际上 Keras(TF Python 后端)调用,它实际上是用于具有多个不互斥的独立类的分类任务。tf.nn.sigmoid_cross_entropy_with_logits
另一方面,我的期望categorical_crossentropy
是用于多类分类,其中目标类相互依赖,但不一定是单热编码的。
但是,Keras 文档指出:
(...)当使用 categorical_crossentropy 损失时,您的目标应该是分类格式(例如,如果您有 10 个类,则每个样本的目标应该是一个 10 维向量,该向量是全零期望索引处为 1对应于样本的类别)。
如果我没记错的话,这只是 one-hot 编码分类任务的特例,但潜在的交叉熵损失也适用于概率分布(“多类”,依赖标签)?
此外,Keras 使用tf.nn.softmax_cross_entropy_with_logits
(TF python backend) 来实现,它本身声明:
注意:虽然这些类是互斥的,但它们的概率不必是. 所需要的只是每一行标签都是一个有效的概率分布。如果不是,则梯度的计算将不正确。
如果我错了,请纠正我,但在我看来,Keras 文档 - 至少 - 不是很“详细”?!
那么,Keras 命名损失函数背后的想法是什么?文档是否正确?如果二进制交叉熵真的依赖于二进制标签,它不应该适用于自动编码器,对吧?!同样,分类交叉熵:如果文档正确,则仅适用于单热编码标签?!