我正在尝试在喀拉拉邦实施异方差的不确定性。我的模型有两个最后一层:
#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)
,但是不幸的是,这在保存和加载模型方面造成了问题。我想找到另一种方法来实现它,以便保存和加载模型。
答案 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})