带定制损耗+路缘石的装载模型

2024-03-29 10:00:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在Keras中,如果您需要一个带有附加参数的自定义损耗,我们可以像https://datascience.stackexchange.com/questions/25029/custom-loss-function-with-additional-parameter-in-keras中提到的那样使用它

def penalized_loss(noise):
    def loss(y_true, y_pred):
        return K.mean(K.square(y_pred - y_true) - K.square(y_true - noise), axis=-1)
    return loss

当我训练这个模型时,上面的方法是有效的。然而,一旦模型被训练,我就很难加载模型。当我尝试在如下的加载模型中使用custom_objects参数时

model = load_model(modelFile, custom_objects={'penalized_loss': penalized_loss} )

它抱怨ValueError: Unknown loss function:loss

是否有任何方法可以将损失函数作为custom_objects中的自定义损失之一传入?据我所知,在加载模型调用期间,内部函数不在命名空间中。是否有更简单的方法加载模型或使用带有附加参数的自定义损耗


Tags: 方法模型true参数returnobjectsdefcustom
2条回答

你可以试试这个:

import keras.losses
keras.losses.penalized_loss = penalized_loss

(在当前“py”文件中定义了“惩罚损失”函数之后)。

是的,有!custom_objects需要您用作损失函数的确切函数(在您的案例中是内部函数):

model = load_model(modelFile, custom_objects={ 'loss': penalized_loss(noise) })

不幸的是,keras不会在模型中存储噪音的值,因此需要手动将其输入load_model函数。

相关问题 更多 >