似乎将“相同的损失”传播到两个分支不会生效,除非 alpha 依赖于两个分支。如果 alpha 不随两个分支而变化,则部分损失对于一个分支将是恒定的。
因此,在这种情况下,只需编译两个损失分开的模型,并将权重添加到编译方法中:
model.compile(optmizer='someOptimizer',loss=[loss1,loss2],loss_weights=[alpha,1-alpha])
当需要改变alpha时再次编译。
但如果 alpha 确实依赖于两个分支,那么您需要连接结果并计算 alpha 的值:
singleOut = Concatenate()([x1,x2])
以及自定义损失函数:
def weightedLoss(yTrue,yPred):
x1True = yTrue[0]
x2True = yTrue[1:]
x1Pred = yPred[0]
x2Pred = yPred[1:]
#calculate alpha somehow with keras backend functions
return (alpha*(someLoss(x1True,x1Pred)) + ((1-alpha)*(someLoss(x2True,x2Pred))
使用此函数进行编译:
model.compile(loss=weightedLoss, optimizer=....)