目前,我已经从模型中删除了这个
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
,它不会返回错误...在这里非常困惑
谢谢!
答案 0 :(得分:0)
如果只想使用classes
(这是第一个输出)来计算损失,则可以在编译时设置loss_weights
选项(https://keras.io/models/model/)。
model.compile(...., loss_weights=[1.0, 0.0])
还请注意,将分别计算每个输出的损耗,然后对输出进行平均(默认情况下权重相等)以获得单个损耗度量。因此,y_pred[0]
并不意味着classes
,而是classes
和x
的第一个元素。
编辑。
如果它是类和x的第一个元素,则y_pred [0]的形状是什么?这里有点困惑
都! Keras分别计算classes
和x
的损耗,然后取(加权)平均值。因此,如果将问题中的损失函数定义为return keras.losses.binary_crossentropy(y_true, y_pred[0])
,则keras尝试使用classes_true
与class_pred[0]
以及x_true
与{{1} },会引起形状不匹配错误。