Keras:如何加载具有两个输出和自定义丢失功能的模型?

问题描述 投票:0回答:1

我已经训练了一个Keras(带有Tensorflow后端)模型,它有两个具有自定义丢失功能的输出。我需要帮助使用custom_objects参数从磁盘加载模型。

在编译模型时,我使用了loss和loss_weights参数,如下所示:

losses = {
            'output_layer_1':custom_loss_fn,
            'output_layer_2':custom_loss_fn
         }

loss_weights = {
                'output_layer_1': 1.0, 
                'output_layer_2': 1.0
               }

model.compile(loss=losses, loss_weights=loss_weights, optimizer=opt)

该模型正在训练中没有任何问题。我保存模型如下:

model.save(model_path)

我之前没有定义“custom_loss_fn”的原因是因为custom_loss_fn是在另一个自定义Keras层中定义的。

我的问题是如何在推理过程中加载持久存储到磁盘的模型。如果它是单个输出模型,我将使用custom_objects加载模型,如此stackoverflow问题中所述:Loading model with custom loss + keras

model = keras.models.load_model(model_path, custom_objects={'custom_loss_fn':custom_loss_fn})

但是如何在我的情况下扩展这个,我有两个输出,在字典中定义的损失和损失权重以及自定义损失函数?

换句话说,在custom_objectslosses被定义为词典的情况下,如何填充loss_weights

我正在使用带有Tensorflow后端v1.8.0的Keras v2.1.6。

python tensorflow keras keras-layer
1个回答
0
投票

如果你可以在加载方面重新编译模型,最简单的方法是只保存权重:model.save_weights()。如果你想使用save_model并拥有自定义Keras图层,请确保它们实现了get_config方法(请参阅this参考)。对于没有渐变的ops,我在没有正确使用keras.backend函数的情况下混合张量流和Keras时看到了这一点,但是如果没有模型代码本身我就无法帮助了。

© www.soinside.com 2019 - 2024. All rights reserved.