Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?

Posted

技术标签:

【中文标题】Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?【英文标题】:Keras: Why do loss functions have to return one scalar per batch item rather than just one scalar?Keras:为什么损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量? 【发布时间】:2017-08-11 06:35:04 【问题描述】:

我正在 Keras 中编写一个自定义损失函数,但遇到了以下问题:

为什么 Keras 损失函数必须为每个批次项返回一个标量,而不是只返回一个标量?

我关心的是整个批次的累积损失,而不是每件商品的损失,不是吗?

【问题讨论】:

因为它更干净。批处理只是优化算法使用的抽象。他们构建了损失函数,使其对用户来说最直观。 @NassimBen 我实际上会声称完全相反。根据其定义,目标函数具有标量输出值,因此如果 Keras 这样做会更清晰。当然,批次只是一个抽象,但成本函数的重点是最小化所有训练示例的成本(无论“全部”是指 SGD 中的迷你批次,还是用于确定性梯度下降的整个训练集)同时。 我想我明白了:fit() 有一个参数sample_weight,您可以使用它为批次中的不同样本分配不同的权重。为了使其工作,您需要损失函数来返回每个批次项目的损失。 确实...它的方式更加灵活。我喜欢这样的 【参考方案1】:

我想我想通了:fit() 有一个参数sample_weight,您可以使用它为批次中的不同样本分配不同的权重。为此,您需要损失函数来返回每个批次项目的损失。

【讨论】:

以上是关于Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?的主要内容,如果未能解决你的问题,请参考以下文章

keras loss 必须每批输出一个标量还是整批输出一个标量?

在 Keras 中实现批次相关的损失

使用keras在损失函数中批量逐元素产品

强制每个 Keras 批次包含每个类别中的至少一个图像是不好的做法吗?

Keras 上的自定义损失函数

Keras 在自定义损失函数中访问单个值