【发布时间】:2019-12-04 11:38:30
【问题描述】:
我在 R 中使用 Keras,其文档指定:
如果模型有多个输出,您可以通过传递字典或损失列表对每个输出使用不同的损失。模型将最小化的损失值将是所有单个损失的总和。
如果我有多个输出但应用了相同的损失函数,Keras 仍然会对它们求和,还是会进行其他转换,例如平均?
【问题讨论】:
我在 R 中使用 Keras,其文档指定:
如果模型有多个输出,您可以通过传递字典或损失列表对每个输出使用不同的损失。模型将最小化的损失值将是所有单个损失的总和。
如果我有多个输出但应用了相同的损失函数,Keras 仍然会对它们求和,还是会进行其他转换,例如平均?
【问题讨论】:
它始终是各个损失项的总和,但它是一个加权和,并且每个损失都有一个权重,因此您可以通过设置正确的权重来实现平均。
需要加权,因为每个任务(输出)可能对正在优化的最终损失具有不同的范围和重要性。
【讨论】:
按照@Matias Valdenegro 的回答,您可以在 Keras model.compile(loss_weights={'output_name': loss_weight}) 中为每个损失项配置 loss_weight
例如:你有你的损失函数:L = λ1*L1 + λ2*L2 + λ3*L3
然后在 keras 中配置:model.compile(loss_weights={'output1_name': λ1, 'output2_name': λ2,'output2_name': λ3})
【讨论】: