将两个输出层组合到单损耗函数中



我试图在keras中实现异性范围的不确定性。我的模型有两个最后一层:

# 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)

我设法使它与

一起使用
model.add_loss(loss)

,但不幸的是,这会在保存和加载模型中造成问题。我想找到另一种实施方法,以便保存和加载模型有效。

我不知道您遇到的错误,所以我在这里拍摄有点盲目,但听起来您有与我相似的问题。

我创建了一个自定义损失功能,我在培训期间使用了该功能,因此无法加载模型。这些自定义对象必须像这样指定:注意custom_objects

建立模型时:

def myLoss():
    ... some code here
    return loss
model.compile(optimizer = opt, loss = myLoss)

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

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

最新更新