【问题标题】:minimize two loss functions in Keras最小化 Keras 中的两个损失函数
【发布时间】:2020-08-14 23:36:55
【问题描述】:

我想最小化两个损失函数,即均方误差和 KL 散度。 可以在 Keras 上实现这一点 像

loss =tf.keras.losses.KLDivergence() + tf.keras.losses.MeanSquaredError()
model.compile(optimizer="Adam",
              loss=loss 
              )

这段代码给了我错误,因为我无法对这些函数求和

【问题讨论】:

    标签: python keras deep-learning


    【解决方案1】:

    您可以像这样定义自定义损失 -

    import tensorflow.keras as K
    
    def custom_loss(y_true,y_pred):
        l = K.backend.sum(K.losses.KLDivergence(y_true, y_pred), K.losses.MeanSquaredError(y_true, y_pred))
        return l
    
    model.compile(optimizer='adam',
                  loss=custom_loss,
                  metrics=['accuracy'])
    

    您可以总结这 2 个的原因是您试图总结 2 个类的对象。相反,您需要调用它们并总结它们的结果。

    【讨论】:

    • 该解决方案完美运行。但是当我最小化它(两个组合的损失函数)时,损失低于 0,这与 MSE 的最小值以及通常总是非负的 KL 散度不同。为什么损失低于0?
    • 这完全取决于您正在构建的数据和模型。我无法评论为什么损失是负数,因为上述方法不会以任何形式导致损失(它是 2 个损失之间的总和,就是这样!)。此外,KL Divergence 对整个数据集是正的,因为它本身就是一个总和,但并非总是如此。检查 - mathoverflow.net/questions/43849/…
    • 如果您能够构建自定义损失函数,请将此问题标记为已解决,因为这是最初的问题。如果您单独发布另一个问题,我可以尝试帮助它,因为这是两个不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2021-07-23
    • 2018-04-03
    • 2019-01-20
    • 1970-01-01
    • 2018-12-17
    • 2023-04-03
    相关资源
    最近更新 更多