簡體   English   中英

如何加載用 saved_model 保存的 tensorflow keras model 以使用預測 function?

[英]How to load a tensorflow keras model saved with saved_model to use the predict function?

我有一個 keras 順序 model。我已經使用命令保存了 model。

tf.keras.models.save_model(model, 'model')

現在它具有以下文件夾結構,

現在它具有以下文件夾結構,

現在我正在加載 model 使用

model = tf.saved_model.load('model')

我也試過

model = tf.keras.models.load_model('model')

然后我試圖預測使用

model.predict(padded_seq, verbose=0)

它給我錯誤

AttributeError: '_UserObject' object has no attribute 'predict'

如何在加載的 model 上使用預測。 我試過 h5 model,效果很好。 但我的主要用途是使用這種拋出錯誤的 model。

您正在使用不正確的 function 來加載您的 model ( tf.saved_model.load ); 它不返回 Keras object (來自文檔):

tf.saved_model.load 返回的tf.saved_model.load不是 Keras object(即沒有.fit.predict等方法)。

您應該使用tf.keras.models.load_model來加載 Keras model。

我從 TFHUB 下載的 SavedModel 模型遇到了同樣的問題(例如:InceptionV3),即使使用tf.keras.models.load_model()加載它也會返回一個普通的 model(一種基本的通用 model 以允許向后兼容) does not have keras API (predict, fit, summary, build, etc) on top of it, the object type is: <tensorflow.python.saved_model.load.Loader._recreate_base_user_object.<locals>._UserObject object at 0x14a42ac2bcf8> If you只想使用推理調用(預測),您可以直接在數據上調用您的 model(定義了 __call__ 方法),如下所示:

model(padded_seq) # or model.__call__(padded_seq)

我發現再次獲得 Keras API 的一種解決方法是將其包裝在 Sequential model 中的 KerasLayer 中,如下所示:

import tensorflow as tf
import tensorflow_hub as hub

model = tf.keras.Sequential([
    hub.KerasLayer("saved/model/path")
])
model.build(<input_shape>)

現在 model 支持所有 Keras API,如預測、摘要等,現在應該可以工作了:

model.predict(padded_seq, verbose=0)

暫無
暫無

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

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