Python tf.keras.loss.category_crossentropy返回数组还是单个值?
我正在使用自定义的训练循环。Python tf.keras.loss.category_crossentropy返回数组还是单个值?,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我正在使用自定义的训练循环。tf.keras.loss.categorical\u crossentropy返回的损失是一个数组,我假设(1,批大小)。这是它应该返回的值还是单个值 在后一种情况下,你知道我做错了什么吗?大多数常见的损失返回原始形状减去最后一个轴 因此,如果原始的y\u pred形状是(示例,…,类),则生成的形状将是(示例,…) 这可能是因为Keras可能会在进一步的计算中使用这个张量,用于样本权重,或者其他事情 在自定义循环中,如果这些维度没有用处,您只需在计算渐变之前取K.
tf.keras.loss.categorical\u crossentropy
返回的损失是一个数组,我假设(1,批大小)
。这是它应该返回的值还是单个值
在后一种情况下,你知道我做错了什么吗?大多数常见的损失返回原始形状减去最后一个轴 因此,如果原始的
y\u pred
形状是(示例,…,类)
,则生成的形状将是(示例,…)
这可能是因为Keras可能会在进一步的计算中使用这个张量,用于样本权重,或者其他事情
在自定义循环中,如果这些维度没有用处,您只需在计算渐变之前取
K.mean(loss\u result)
。(其中K
是keras.backend
或tensorflow.keras.backend
)如果预测形状为(批次、类的样本)
tf.keras.loss.Category\u crossentropy
以(批次样本,)
的形式返回损失
因此,如果您的标签是:
[[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)
谢谢你,丹尼尔。我已经在申请K.mean(损失结果),但只是想确认一下。谢谢你的详细回答@UmairKhawaja,我的荣幸!如果你感到满意,请接受它或投票,实际上我想我给了你更具体的答案,虽然丹尼尔的答案在一般情况下也很有用。