本文主要列舉了在用keras/tensorflow訓練好模型後,使用flask部署服務時的兩個常見錯誤及一次性解決辦法。
類型1、ValueError: Tensor Tensor(“dense_1/Softmax:0”, shape=(?, 5), dtype=float32) is not an element of this graph.
這個錯誤主要是報模型最後一層出現類似的錯誤,比如這裏的最後一層是softmax,不同的模型最後一層可能不一樣,但錯誤類型一致。
類型2、W tensorflow/core/framework/op_kernel.cc:1502] OP_REQUIRES failed at resource_variable_ops.cc:619 : Not found: Container localhost does not exist. (Could not find resource: localhost/Embedding-Segment/embeddings)
這個錯誤主要是報模型的一些中間層錯誤。
當然,在單獨的 .py 文件中模型預測是正常的,但在flask中調用 model.predict() 就報上述類似錯誤。
一般來說添加如下代碼可以解決這兩個錯誤(其他一般錯誤也可以嘗試以下方法):
from tensorflow.python.keras.backend import set_session
# 程序開始時聲明
sess = tf.Session()
graph = tf.get_default_graph()
# tf2: graph = tf.compat.v1.get_default_graph()
# 在model加載前添加set_session
set_session(sess)
model = models.load_model(model_path)
# 每次使用有關模型請求時
# for each request:
global sess
global graph
with graph.as_default():
set_session(sess)
model.predict(...)