当前位置: 首页 > 面试题库 >

使用自定义损失+ keras加载模型

钱京
2023-03-14
问题内容

在Keras中,如果您需要自定义损失以及其他参数,我们可以像https://datascience.stackexchange.com/questions/25029/custom-
loss-function-with-additional-parameter-in-
凯拉斯

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

当我训练模型时,上述方法有效。但是,一旦训练了模型,我将很难加载模型。当我尝试在load_model中使用custom_objects参数时,如下所示

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

它抱怨 ValueError: Unknown loss function:loss

有什么方法可以将损失函数作为自定义损失之一传递custom_objects吗?据我所知,在load_model调用期间,内部函数不在名称空间中。有没有更简单的方法来加载模型或使用带有其他参数的自定义损失


问题答案:

就在这里!custom_objects期望使用与损失函数完全相同的函数(在您的情况下为内部函数):

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

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



 类似资料:
  • 我在Tensorflow后端使用Keras。我想创建一个自定义损失函数,它将获得两个直方图之间的欧几里德距离,但我得到了以下错误: TypeError:“Mul”Op的输入“y”的类型float32与参数“x”的类型int32不匹配。 因此,我不知道如何定义我的损失函数。 我试图修改代码,但我得到另一个错误。“h_true=tf.cast(h_true,dtype=tf.dtypes.float3

  • 嗨,我一直试图使一个自定义损失函数在kerasdice_error_coefficient。它有它的实现在张量板和我尝试使用相同的函数在keras与张量流但它不断返回一个NoneType当我使用model.train_on_batch或model.fit在那里,因为它给适当的值时,使用在模型中的指标...能不能请人帮帮我我该怎么办?我尝试过跟随像Keras-FCN这样的库,在那里他使用了自定义损失

  • 问题内容: 在Keras(具有Tensorflow后端)中,当前输入模式可用于我的自定义损失函数吗? 当前输入模式定义为用于产生预测的输入向量。例如,考虑以下内容:。然后,当前输入模式是与y_train(在损失函数中称为y_true)关联的当前X_train向量。 在设计自定义损失函数时,我打算优化/最小化一个需要访问当前输入模式而不只是当前预测的值。 我已经看过https://github.co

  • 我有一个NN,它有两个相同的CNN(类似于暹罗网络),然后合并输出,并打算在合并的输出上应用自定义损失函数,如下所示: 在我的自定义损失函数中,我需要将y垂直分解为两块,然后对每一块应用分类交叉熵损失。但是,我不断从我的损失函数得到dtype错误,例如: ()中的ValueError回溯(最近一次调用)---- /usr/local/lib/python3。5/地区包/KERA/发动机/培训。编译

  • 我手头有一个问题,它优化了一个损失函数,而不是y_pred和y_true的函数。通过Keras留档后,我发现所有自定义损失函数必须是y_pred和y_true的函数。 在Keras中是否有其他方法实现我的损失函数?

  • 我试图在Keras中构造一个自定义损失函数-这是用于生存分析中的删失数据。 这种损失函数本质上是二元交叉熵,即多标签分类,但是损失函数中的求和项需要根据Y_true标签的可用性而变化。见下面的例子: 示例1:Y_可用的所有标签均为True Y_true=[0,0,0,1,1] Y_pred=[0.1,0.2,0.2,0.8,0.7] 损失=-1/5(log(0.9)log(0.8)log(0.8)