繁体   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