将两个输出层组合成单个损失函数

时间:2019-05-06 21:29:32

标签: keras tf.keras

我正在尝试在喀拉拉邦实施异方差的不确定性。我的模型有两个最后一层:

#BP span {
    display : block;
    font-size : 13px;
}

#BP small {
    font-size: 9px;
}

我想将这些输出合并为一个损失:

# Classification block
x = layers.Flatten(name='flatten')(x)
x = layers.Dense(4096, activation='relu', name='fc1')(x)
x = layers.Dense(4096, activation='relu', name='fc2')(x)

# Good old output
linear_output = layers.Dense(units=1, activation="linear", name='linear_output')(x)

# Data-dependent uncertainty outainty
variance_output = layers.Dense(units=1, activation='linear', name='variance_output')(x)

我设法使其适用于

loss = K.sum(0.5 * K.exp(-1 * variance_output) * K.square(K.abs(input_label - linear_output)) + 0.5 * variance_output)

,但是不幸的是,这在保存和加载模型方面造成了问题。我想找到另一种方法来实现它,以便保存和加载模型。

1 个答案:

答案 0 :(得分:0)

我不知道您遇到什么错误,所以我在这里开枪有点盲目,但这听起来像是您遇到了与我类似的问题。

我创建了在训练期间使用的自定义损失函数,因此无法加载模型。必须像下面这样指定这些自定义对象: 注意custom_objects

建立模型时:

def myLoss():
    ... some code here
    return loss

model.compile(optimizer = opt, loss = myLoss)

然后,在加载模型时:(必须在两个脚本中都定义函数)

model = load_model(model_path, custom_objects={'myLoss' : myLoss})