分支输出 Keras

2024-04-25

我的模型分为 2 个输出层,如下所示:

输入 -> L1 -> L2 -> L3 -> 输出1

输入 -> L1 -> L2 -> L3 -> 输出2

我这样使用它是因为我想要out1 and out2有2个不同的激活函数。因此,我创建了一个模型:

model = Model(inputs=[input_layer], outputs=[out1, out2])

我正在使用以下方式编译它:

model.compile(Adam(lr=1e-2), loss=[loss_fn1, loss_fn2], metrics=[accuracy])

损失函数定义如下:

def loss_fn1(y_true, y_pred):
    #send channel 1 to get bce dice loss
    loss1 = binary_crossentropy(y_true[:, :, :, 0:1], y_pred[:, :, :, 0:1])   
    return loss1

def loss_fn2(y_true, y_pred):    
    #l2 loss for channels 2 and 3
    loss2 = mean_squared_error(y_true[:, :, :, 1:3], y_pred[:, :, :, 1:3])
    return loss2

这个有用吗loss_fn1 on out1 and loss_fn2 on out2张量?因为,这就是我打算做的,但我不确定我的代码是否真的做到了这一点。任何指示都会有所帮助。

我想用loss_fn1 on out1张量和loss_fn2功能于out2 tensor.

EDIT:

loss_fn1 范围内的损失值:[0, 1] - sigmoid 激活。

loss_fn2 范围内的损失值:[0, inf] - 无激活

有没有办法独立减少loss_fn1和loss_fn2,而不使用单独的模型?我担心loss1+loss2最终只会导致loss2的值减少,因为loss1与loss2相比具有较低的值。


是的,你的解释是正确的。来自Keras 文档 https://keras.io/models/model/:

如果模型有多个输出,您可以通过传递字典或损失列表来在每个输出上使用不同的损失。模型将最小化的损失值将是所有单独损失的总和。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分支输出 Keras 的相关文章

随机推荐