具有多个目标的自定义损失函数

时间:2021-01-31 23:03:58

标签: python tensorflow keras

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

我的自定义损失函数如下

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 的形状会是什么?它们是否将是二维列表,我是否必须拆分它们并在每个列表上执行操作?

1 个答案:

答案 0 :(得分:0)

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

.git/worktrees/<name>/index

训练时数据通过字典输入模型,模型的输出和预测也是字典形式,而不是列表形式。

pi@raspberrypi:/ $ pip3 -V
pip 18.1 from /home/pi/.local/lib/python3.7/site-packages/pip (python 3.7)
pi@raspberrypi:/ $ sudo pip3 -V
pip 21.0.1 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

目标名称 optimizer=tf.keras.optimizers.SGD(lr) losses = { "target1": CCC, "target2": Some loss..., "target3": Some loss...} model.compile(optimizer=optimizer, loss=losses,metrics=["accuracy"]) 必须与模型中层的名称匹配。