【问题标题】:how to reference one output from a multi-outputs with different dimension in Keras如何在 Keras 中从具有不同维度的多输出中引用一个输出
【发布时间】:2018-09-12 01:51:37
【问题描述】:

目前,我从我的模型中输出了这个:

egen = keras.models.Model(egen_input, [classes,x])

其中x[None, 32, 32, 3]classes[None, 2] 作为它们的维度。如何在自定义损失函数中仅引用部分输出?

例如,

def customLoss():
  def loss(y_true, y_pred): 
    return keras.losses.binary_crossentropy(y_true, y_pred[0])

return loss

目前上面的损失函数在不匹配的维度上返回错误,但如果我只使用y_pred,它不会返回错误......这里很困惑

谢谢!

【问题讨论】:

    标签: python machine-learning keras loss-function


    【解决方案1】:

    如果你只想使用classes,也就是第一个输出来计算loss,那么你可以在编译的时候设置loss_weights选项(https://keras.io/models/model/)。

    model.compile(...., loss_weights=[1.0, 0.0]) 
    

    另请注意,损失是针对每个输出单独计算的,然后对输出进行平均(默认具有相同的权重)以获得单个损失度量。所以y_pred[0]不代表classes,而是classesx的第一个元素。

    编辑。

    如果它是类和 x 的第一个元素,那么 y_pred[0] 的形状是什么?这里有点混乱

    两者都有! Keras 分别计算 classesx 的损失,然后取(加权)平均值。因此,如果损失函数在问题中定义为return keras.losses.binary_crossentropy(y_true, y_pred[0]),keras 会尝试使用classes_trueclass_pred[0] 以及x_truex_pred[0] 来计算损失,这会引发形状不匹配错误。

    【讨论】:

    • 如果它是 classes 和 x 的第一个元素,那么 y_pred[0] 的形状是什么?这里有点困惑
    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多