我正在训练一个模型,我正在使用自定义损失函数。我一直在使用一个目标,但现在我想尝试喂养两个目标。
我的自定义损失函数如下
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_true
和y_pred
是一维列表,该函数可以正确执行sum
、mean
等操作
我的问题是:如果我使用 [target1, target2]
这样的两个目标,y_true
和 y_preds
的形状会是什么?它们是否将是二维列表,我是否必须拆分它们并在每个列表上执行操作?
答案 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"])
必须与模型中层的名称匹配。