自定义多目标损失函数



我正在训练一个模型,我正在使用自定义损失函数。我一直使用一个目标,但现在我想尝试喂养两个目标。

我的自定义损失函数看起来像这样

def CCC(y_true, y_pred):
import keras.backend as K 

s_xy = K.mean( (y_true - K.mean(y_true)) * (y_pred - K.mean(y_pred)) )

x_m = K.mean(y_true)
y_m = K.mean(y_pred)

s_x_sq = K.var(y_true)
s_y_sq = K.var(y_pred)

ccc = (2.0*s_xy) / (s_x_sq + s_y_sq + (x_m-y_m)**2)

return 1 - ccc

对于一个目标,y_truey_pred是一维列表,函数可以正确执行summean等操作。

我的问题是:如果我使用像[target1, target2]这样的两个目标,y_truey_preds的形状将是什么?它们会是二维的列表吗?我是否需要拆分它们并在每个列表上执行操作?

具有多个输出的模型可以编译为以下代码:

optimizer=tf.keras.optimizers.SGD(lr)
losses = {
"target1": CCC,
"target2": Some loss...,
"target3": Some loss...}
model.compile(optimizer=optimizer, loss=losses,metrics=["accuracy"])

数据在训练时由字典提供给模型,模型的输出和预测也是字典形式,而不是列表形式。

train_y={'target1':label1,'target2':label2,'target3':label3}
model.fit(x=train_x,y=train_y,epochs=10,...)

目标名称target1, target2, target3必须与模型中的层名匹配。

相关内容

  • 没有找到相关文章

最新更新