[英]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.