【发布时间】:2017-12-12 14:04:54
【问题描述】:
我的模型是这样的,它分为 2 个输出层,如下所示:
输入 -> L1 -> L2 -> L3 -> out1
输入 -> L1 -> L2 -> L3 -> out2
我这样使用它是因为我希望 out1 和 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
这是否在out1 和loss_fn2 上使用loss_fn1 out2 张量?因为,这就是我打算做的,但我不确定我的代码是否真的做到了。任何指针都会有所帮助。
我想在out1张量上使用loss_fn1,在out2张量上使用loss_fn2函数。
编辑:
loss_fn1 范围内的损失值:[0, 1] - sigmoid 激活。
loss_fn2 范围的损失值:[0, inf] - 没有激活
有没有办法单独减少 loss_fn1 和 loss_fn2,而不使用单独的模型?恐怕 loss1 + loss2 最终只会导致 loss2 的值减少,因为 loss1 与 loss2 相比具有较低的值。
【问题讨论】: