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