我收到“来自未知节点的请求张量连接:“keras_layer_input:0””加载keras模型时出错

问题描述

我使用了保存的模型

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 作为自定义推理逻辑的替代方案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...