keras loss 必须每批输出一个标量还是整批输出一个标量?
Posted
技术标签:
【中文标题】keras loss 必须每批输出一个标量还是整批输出一个标量?【英文标题】:Do keras loss have to output one scalar per batch or one scalar for the whole batch ? 【发布时间】:2019-02-05 02:48:49 【问题描述】:我在related question 中读到,keras 自定义损失函数必须为每个批次项目返回一个标量。
我写了一个损失函数,它为整个批次输出一个标量,并且网络似乎收敛了。但是,我无法找到有关此的任何文档或代码中究竟发生了什么。有没有在某处进行广播?如果我添加样本权重会发生什么?有人知道魔法发生的地方吗?
谢谢!
【问题讨论】:
将有助于分析以查看您的模型代码:-) 【参考方案1】:通常,您可以经常使用标量代替向量,这将被解释为填充了该值的向量(例如 1 被解释为 1,1,1,1 )。 因此,如果您对批次的损失函数的结果是 x,则它被解释为好像您说批次中每个项目的损失都是 x。
【讨论】:
这是我的猜测,但我正在寻找可能发生这种情况的确切代码行以进行确认 Keras(或 tensorflow)实现中的确切行,在哪里实现广播? 看看:github.com/keras-team/keras/blob/…,这里就是计算总损失的地方。以上是关于keras loss 必须每批输出一个标量还是整批输出一个标量?的主要内容,如果未能解决你的问题,请参考以下文章
Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?