tensorflow Keras SparseCategoricalCrossentropy将输入标签扁平化

jc3wubiy  于 2023-11-21  发布在  Go
关注(0)|答案(1)|浏览(110)

我正在训练一个图像多分类器。使用Keras中的损失SparseCategoricalCrossentropy。我发现下面的问题。

import tensorflow as tf
a=tf.constant([[0.,0.,1.],[1.,0.,0.]])
b=tf.constant([[0.,0.,1.],[0.,1.,0.]])
loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss = loss_object(a, b)

字符串
a表示我的2个输入数据的真标签。b表示我的2个输入数据的预测标签。计算遇到以下错误。

ValueError: `labels.shape` must equal `logits.shape` except for the last dimension. Received: labels.shape=(6,) and logits.shape=(2, 3)


不知何故,真正的标签被压平,变得不可计算。我如何处理这个问题来计算关于2个输入数据的SparseCategoricalCrossentropy?

iszxjhcz

iszxjhcz1#

您的标签不是稀疏的,它们是独热编码的,这意味着SparseCategoricalCrossentropy将无法工作。

a=tf.constant([[0.,0.,1.],[1.,0.,0.]])

字符串

a=tf.constant([2., 0.])


这将起作用,因为a是调用损失函数的第一个参数,这是地面真值,或y_true

loss = loss_object(a, b)


b可以进行one-hot编码,因为TensorFlow会将其转换为正确的格式,但这似乎只有在a已经是正确的(稀疏)格式时才有效。

相关问题