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

Uma*_*aja 5 python keras tensorflow loss-function

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

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

Gee*_*ode 2

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

所以,如果你的标签是:

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
Run Code Online (Sandbox Code Playgroud)

你的预测是:

[[0.9  0.05 0.05]
 [0.5  0.89 0.6 ]
 [0.05 0.01 0.94]]
Run Code Online (Sandbox Code Playgroud)

您将遭受如下损失:

[0.10536055 0.8046684  0.06187541]
Run Code Online (Sandbox Code Playgroud)

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

loss = tf.keras.backend.mean(losses)
Run Code Online (Sandbox Code Playgroud)