如何在 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
,而是classes
和x
的第一个元素。
编辑。
if it's the first element of classes and x, what would be the shape of y_pred[0] ? bit confused here
两者都有! Keras 分别计算 classes
和 x
的损失,然后取(加权)平均值。因此,如果损失函数在问题中定义为 return keras.losses.binary_crossentropy(y_true, y_pred[0])
,则 keras 会尝试使用 classes_true
与 class_pred[0]
以及 x_true
与 x_pred[0]
来计算损失],这会引发形状不匹配错误。
目前,我从我的模型中输出了这个:
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
,而是classes
和x
的第一个元素。
编辑。
if it's the first element of classes and x, what would be the shape of y_pred[0] ? bit confused here
两者都有! Keras 分别计算 classes
和 x
的损失,然后取(加权)平均值。因此,如果损失函数在问题中定义为 return keras.losses.binary_crossentropy(y_true, y_pred[0])
,则 keras 会尝试使用 classes_true
与 class_pred[0]
以及 x_true
与 x_pred[0]
来计算损失],这会引发形状不匹配错误。