keras结合两个损失与可调整的重量

时间:2017-09-11 20:32:10

标签: tensorflow deep-learning keras backpropagation loss-function

enter image description here

所以这里是详细说明。我有一个keras功能模型,有两层输出x1和x2。

x1 = Dense(1,activation='relu')(prev_inp1)

x2 = Dense(2,activation='relu')(prev_inp2)

我需要使用这些x1和x2,合并/添加它们,并在附加图像中提出加权损失函数。将“同样的损失”传播到两个分支。 Alpha可随着迭代而灵活变化

1 个答案:

答案 0 :(得分:2)

似乎传播了同样的损失"进入两个分支都不会生效,除非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=....)