簡體   English   中英

Keras:如何加載具有兩個輸出和自定義損失函數的模型?

[英]Keras: How to load a model having two outputs and a custom loss function?

我已經訓練了一個 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_objects可以在此情況下填充lossesloss_weights定義詞典?

我將 Keras v2.1.6 與 Tensorflow 后端 v1.8.0 一起使用。

如果您可以在加載端重新編譯模型,最簡單的方法是只保存權重: model.save_weights() 如果您想使用 save_model 並擁有自定義 Keras 層,請確保它們實現了get_config方法(請參閱參考資料)。 至於沒有梯度的操作,我在沒有正確使用keras.backend函數的情況下混合 tensorflow 和 Keras 時看到了這一點,但如果沒有模型代碼本身,我就keras.backend了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM