如何在 Keras 中从具有不同维度的多输出中引用一个输出

how to reference one output from a multi-outputs with different dimension in Keras

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

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

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

谢谢!

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

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

另请注意,损失是针对每个输出分别计算的,然后对输出进行平均(默认情况下具有相同的权重)以获得单个损失指标。所以y_pred[0]并不是classes,而是classesx的第一个元素。

编辑。

if it's the first element of classes and x, what would be the shape of y_pred[0] ? bit confused here

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