Keras SparseCategoricalCrossentropy 压平输入标签

问题描述 投票:0回答:1

我正在训练图像多分类器。 在 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?

tensorflow deep-learning
1个回答
0
投票

您的标签并不稀疏,它们是单热编码的,这意味着

SparseCategoricalCrossentropy
不起作用。要解决这个问题,请更改

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

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

这会起作用,因为 a 是调用损失函数的第一个参数,它是基本事实,或者

y_true
:

loss = loss_object(a, b)

b
可以进行单热编码,因为 TensorFlow 会将其转换为正确的格式,但这似乎只有在
a
已经采用正确(稀疏)格式的情况下才有效。

© www.soinside.com 2019 - 2024. All rights reserved.