tf.keras.losses.categorical_crossentropy是否返回数组或单个值?

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

我正在使用自定义训练循环。 tf.keras.losses.categorical_crossentropy返回的损耗是我假设(1,batch_size)的数组。这是应该返回的值还是单个值?

在后一种情况下,知道我可能做错了吗?

python tensorflow keras loss-function
2个回答
0
投票

最常见的损失返回原始形状减去最后一个轴。

因此,如果您的原始y_pred形状为(samples, ..., ..., classes),那么您得到的形状将为(samples, ..., ...)

这可能是因为Keras可能在进一步的计算中使用此张量,例如样本权重或其他。

在自定义循环中,如果这些尺寸无用,您可以在计算梯度之前简单地取一个K.mean(loss_result)。 (Kkeras.backendtensorflow.keras.backend的地方)


0
投票

如果预测形状为(samples of batch, classes),则tf.keras.losses.categorical_crossentropy将以(samples of batch,)的形式返回损失。

因此,如果您的标签是:

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

您的预测是:

[[0.9  0.05 0.05]
 [0.5  0.89 0.6 ]
 [0.05 0.01 0.94]]

您将遭受损失,例如:

[0.10536055 0.8046684  0.06187541]

在大多数情况下,您的模型将使用这些值的mean来更新模型参数。因此,如果您手动进行更新,则可以使用:

loss = tf.keras.backend.mean(losses)
© www.soinside.com 2019 - 2024. All rights reserved.