【发布时间】:2019-04-21 08:22:05
【问题描述】:
Tensorflow 1.12 release notes 声明:“Keras 模型现在可以直接导出为 SavedModel 格式 (tf.contrib.saved_model.save_keras_model()) 并与 Tensorflow Serving 一起使用”。所以我试了一下-
我已经使用单行导出了一个带有此操作的简单模型。但是,Tensorflow 服务无法识别该模型。我想问题出在 docker 调用上,并且模型定义中可能缺少“signature_defs”。感谢您提供有关缺失步骤的信息。
1.训练模型并将其导出到 TF 服务:
这是基于 Jason Brownlee 的 first NN 的代码(选择它是因为它的简单性)
(训练数据,作为一个简短的 CSV 文件,是here):
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.contrib.saved_model import save_keras_model
import numpy
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10)
# evaluate the model
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
# calculate predictions
predictions = model.predict(X)
# round predictions
rounded = [round(x[0]) for x in predictions]
print(rounded)
# Save the model for serving
path = '/TensorFlow_Models/Keras_serving/saved_model' # full path of where to save the model
save_keras_model(model, path)
2。设置 TensorFlow 服务器:
服务器可以通过 docker 或自己的构建来设置。 TF 推荐 docker (TF ref)。在此之后,并基于TF blog 和TF Serving Tutorial:
- 安装 Docker(来自here)
- 获取最新的 TF 服务版本:
docker 拉张量流/服务
- 使用此模型激活 TF 服务 (TF ref):
docker run -p 8501:8501 --name NNN --mount 类型=绑定,源=SSS,目标=TTT -e MODEL_NAME=MMM -t 张量流/服务&
如果有人能确认我会很高兴:
- NNN - docker 容器名称 - 例如,用于 杀死进程。可以任意设置(例如:mydocker)。
- MMM - 模型的名称,似乎是任意设置的。
- SSS - 模型所在的文件夹,完整路径。
- TTT - 应该设置为什么?
3.客户
服务器可以通过 gRPC 或 RESTful API 获取请求。假设我们使用 RESTful API,可以使用 curl (here is a TF example) 访问模型。但是我们如何设置模型的输入/输出呢?是否需要 SignatureDefs (ref)?
总而言之,而 “Keras 模型现在可以直接导出为 SavedModel 格式 (tf.contrib.saved_model.save_keras_model()) 并与 Tensorflow Serving 一起使用”,正如 TF1.12 发行说明中所述,要真正为模型服务,还有一条路要走。我会很高兴有关于完成这个的想法。
【问题讨论】:
-
我认为这是重复的,please check my answer here,希望对您有所帮助。
标签: python tensorflow keras tensorflow-serving