tensorflow - keras 结合两个损失与可调权重

标签 tensorflow deep-learning keras backpropagation loss-function

enter image description here

所以这里是详细描述。我有一个带有两层输出 x1 和 x2 的 keras 功能模型。

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

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

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

最佳答案

似乎将“相同的损失”传播到两个分支中不会生效,除非 alpha 依赖于两个分支。如果 alpha 不是根据两个分支而变化的,那么部分损失将只是一个分支的常数。

因此,在这种情况下,只需将两个损失分开编译模型并将权重添加到 compile 方法中:

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=....)

关于tensorflow - keras 结合两个损失与可调权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46163909/

相关文章:

python - 如何计算一个矩阵中向量之间的欧式距离?

python - Tensorflow:即使进行更多迭代或改变学习率,错误率也不会改善

tensorflow - 混洗 tfrecords 文件

lua - 需要 ('image' )在 Torch7 中不起作用

tensorflow - 如何在 Tensorflow 对象检测 API 中查找边界框坐标

tensorflow - Keras 视频帧预测的输出维度低于输入维度

python - 如何在keras中进行多类图像分类?

python - 训练 tf.estimator.DNNClassifier 时打印准确率

deep-learning - Pytorch:网络根本不学习+权重太低

deep-learning - 在 Keras 中使用 CNN 进行回归任务