3

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

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

4

2 回答 2

2

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

因此,如果您的原始y_pred形状是(samples, ..., ..., classes),那么您的最终形状将是(samples, ..., ...)

这可能是因为 Keras 可能会在进一步的计算中使用这个张量,用于样本权重和其他事情。

在自定义循环中,如果这些维度没有用,您可以K.mean(loss_result)在计算梯度之前简单地进行一次。(其中K一个keras.backendtensorflow.keras.backend

于 2019-12-26T20:44:54.123 回答
1

如果您有一个预测形状,则(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]

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

loss = tf.keras.backend.mean(losses)
于 2019-12-26T22:18:31.003 回答