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

时间:2018-09-12 01:51:38

标签: python machine-learning keras loss-function

目前,我已经从模型中删除了这个

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,它不会返回错误...在这里非常困惑

谢谢!

1 个答案:

答案 0 :(得分:0)

如果只想使用classes(这是第一个输出)来计算损失,则可以在编译时设置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_true与{{1} },会引起形状不匹配错误。