model.compile中的loss函数参数输入三种类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了model.compile中的loss函数参数输入三种类型相关的知识,希望对你有一定的参考价值。

参考技术A model.compile中的loss参数,可以输入三种类型,一种是损失函数名称,一种是自定义函数,还有一种是tf.keras.losses.Loss实例.写文字太麻烦,建议用预设的实例。

keras 如何处理多重损失?

【中文标题】keras 如何处理多重损失?【英文标题】:How does keras handle multiple losses? 【发布时间】:2018-08-30 10:53:04 【问题描述】:

如果我有类似的东西:

model = Model(inputs = input, outputs = [y1,y2])

l1 = 0.5
l2 = 0.3
model.compile(loss = [loss1,loss2], loss_weights = [l1,l2], ...)

Keras 如何处理损失以获得最终损失? 是不是类似:

final_loss = l1*loss1 + l2*loss2

另外,在训练期间是什么意思? loss2 是否仅用于更新 y2 来自的层的权重?还是用于模型的所有层?

【问题讨论】:

【参考方案1】:

来自model documentation:

loss:字符串(目标函数的名称)或目标函数。见损失。如果模型有多个输出,您可以通过传递字典或损失列表在每个输出上使用不同的损失。模型将最小化的损失值将是所有单个损失的总和。

...

loss_weights:可选列表或字典,指定标量系数(Python 浮点数)以加权不同模型输出的损失贡献。然后,模型将最小化的损失值将是所有单个损失的加权总和,由loss_weights 系数加权。如果是列表,则预计与模型的输出有 1:1 的映射关系。如果是张量,则应将输出名称(字符串)映射到标量系数。

所以,是的,最终损失将是“所有个人损失的加权总和,由loss_weights 系数加权”。

您可以查看code where the loss is calculated。

另外,在训练期间是什么意思? loss2 是否仅用于更新 y2 来自的层的权重?还是用于模型的所有层?

权重通过backpropagation 更新,因此每个损失只会影响将输入连接到损失的层。

例如:

                        +----+         
                        > C  |-->loss1 
                       /+----+         
                      /                
                     /                 
    +----+    +----+/                  
 -->| A  |--->| B  |\                  
    +----+    +----+ \                 
                      \                
                       \+----+         
                        > D  |-->loss2 
                        +----+         
loss1 将影响 A、B 和 C。 loss2 将影响 A、B 和 D。

【讨论】:

注意!!!来自文档:'如果模型有多个输出......模型将最小化的损失值将是所有个体损失的总和'(合理)tensorflow.org/api_docs/python/tf/keras/Model#compile所以最终损失将影响所有跨度> 【参考方案2】:

对于反向传播的多个输出,我认为这不是 Fábio Perez 提到的完整答案。

另外,在训练期间是什么意思? loss2是否只用于 更新 y2 来自的层的权重?或者它是否用于 模型的所有层?

对于输出 C 和输出 D,keras 将计算最终损失 F_loss=w1 * loss1 + w2 * loss2。然后,将最终的损失 F_loss 应用于输出 C 和输出 D。最后来自输出 C 和输出 D 的反向传播,使用相同的 F_loss 进行反向传播。

【讨论】:

以上是关于model.compile中的loss函数参数输入三种类型的主要内容,如果未能解决你的问题,请参考以下文章

keras model.compile(loss='目标函数 ', optimizer='adam', metrics=['accuracy'])(代码

keras中model.compile()基本用法

恢复具有不同损失功能的训练

keras中的lossoptimizermetrics

keras损失函数详解

Keras 自定义loss函数 focal loss + triplet loss