问题描述
我使用了保存的模型
tf.keras.experimental.export_saved_model(model,export_path)
使用加载模型
import tensorflow as tf
import tensorflow_hub as hub
import keras
class training_model:
def __init__(self):
path_bce="D:\\nsfw\\training_model\\models\\bce_20210120_153631"
path2="D:\\nsfw\\training_model\\models\\soft-f1_20210120_153631"
self.graph = tf.Graph()
with self.graph.as_default():
self.session = tf.Session()
with self.session.as_default() :
self.reloaded =tf.keras.experimental.load_from_saved_model(path2,custom_objects={'KerasLayer':hub.KerasLayer})
training_model=training_model()
img = keras.preprocessing.image.load_img(
"0drqz7883ox51.jpg",target_size=(224,224)
)
img_array = keras.preprocessing.image.img_to_array(img)
img_array = tf.expand_dims(img_array,0) # Create a batch
with training_model.graph.as_default():
with training_model.session.as_default():
print(training_model.reloaded.predict(img_array,steps=1))
如果我删除 Graph 和 Session,它工作正常,但我想使用 API 为这个模型提供服务。
解决方法
hub.KerasLayer 是一个 TF2 API。要尝试的一件事可能是将预测部分从 TF1 样式(图形 + 会话)切换到 TF2。或者,您可以尝试将 TensorFlow Serving 作为自定义推理逻辑的替代方案。