【问题标题】:How do i specify to a model what to take as input of a custom loss function?我如何向模型指定将什么作为自定义损失函数的输入?
【发布时间】:2021-03-17 07:54:13
【问题描述】:

我在理解/在我的模型中实现自定义损失函数时遇到问题。

我有一个由 3 个子模型组成的 keras 模型,正如您在模型架构中看到的那样,

现在,我想在我的自定义损失函数中使用 modelmodel_2 的输出。 我知道在损失函数定义中我可以写:

    def custom_mse(y_true, y_pred):
        *calculate stuff*
    return loss

但是我如何告诉模型将其 2 个输出作为损失函数的输入?

也许吧,我希望如此,它非常微不足道,但我没有在网上找到任何东西,如果你能帮助我,那就太棒了。

提前致谢

背景: modelmodel_2 是相同的预训练模型,一个二元分类器,它预测 2 个输入(类图像类型)之间的交互。 model_1 是一个生成模型,它将编辑其中一个输入。

因此:

    complete_model = Model(inputs=[input_1, input_2], outputs=[out_model, out_model2])
    opt = *an optimizer*
    
    complete_model.compile(loss=custom_mse,
                           ??????,
                           optimizer = opt,
                           metrics=['whatever'])

主要目标是将带有编辑输入的预测与带有未编辑输入的预测进行比较,因此模型将输出两个交互,我需要在损失函数中使用它们。

编辑: 谢谢安德烈的解决方案,

但是,现在我无法同时实现 2 个损失函数,即具有 add_loss(func) 和 model.complie(loss='binary_crossentropy', ...) 中的经典 binary_crossentropy 的那个。

我可以添加一个 add_loss 指定 model_2.output 和标签吗?如果是,你知道怎么做吗?

当我尝试运行他们提出的代码时,他们自己工作而不是一起工作

ValueError: Shapes must be equal rank, but are 0 and 4 From merging shape 0 with other shapes. for '{{node AddN}} = AddN[N=2, T=DT_FLOAT](binary_crossentropy/weighted_loss/value, complete_model/generator/tf_op_layer_SquaredDifference_3/SquaredDifference_3)' with input shapes: [], [?,500,400,1].

【问题讨论】:

    标签: python tensorflow keras deep-learning loss-function


    【解决方案1】:

    您可以使用compile() 添加损失,仅用于标准损失函数签名(y_true,y_pred)。您不能使用它,因为您的签名类似于 (y_true, (y_pred1, y_pred2))。请改用add_loss() API。见这里:https://keras.io/api/losses/

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多