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 必须每批输出一个标量还是整批输出一个标量?