我所做的是,我已经在Windows上使用Docker部署了张量流服务。我在张量流服务中使用了初始模型。它已启动并正在运行。 现在,我要使用 java ,将来自浏览器的图像上传到在tensorflow服务中运行的初始模型中,作为回应,我应该获得类名。
任何示例示例都会有所帮助。
答案 0 :(得分:0)
tensorflow服务是一项服务,因此应将其视为。不需要任何特殊的东西。由于1.8 tensorflow服务提供了REST API,因此只需将Java应用程序中的http请求发送到REST tensorflow服务服务即可。
在最近发布的博客文章中,有一个简单的示例说明了如何为MNIST设置REST tensorflow服务(但可以与任何模型一起使用):“ Tensorflow服务:REST与gRPC” https://medium.com/@avidaneran/tensorflow-serving-rest-vs-grpc-e8cef9d4ff62
剩下要做的就是根据模型(初始)签名创建REST请求。
答案 1 :(得分:0)
假设Tensorflow服务1.11.0-rc1
(在1.10.1
中不起作用),则请求JSON有效负载的形式为:
{
"inputs": {
"images": [{ "b64": "IMAGE_BASE64" }]
}
}
IMAGE_BASE64
是要在其上进行预测的图像上的Base64编码(通常是一个长字符串,因此此处未显示)。 Java客户端库需要为输入图像构建此有效负载。
然后,Java客户端会将请求提交到以下端点:
POST /v1/models/inception:predict
您可能必须用inception
替换服务器上部署的模型的名称。
要尝试通过外壳程序(从Docker上运行的Linux或使用等效的PowerShell命令)对localhost
上可用的服务器进行尝试(映射到Docker Serving容器公开的端口,此处为{{1 }}):
8501
curl -d "@request.json" -X POST http://localhost:8501/v1/models/inception:predict
文件在本文开头包含请求JSON有效负载。典型响应:
request.json
重要说明:以上运行来自于部署{
"outputs": {
"classes": [
"class1",
"class2",
...
],
"scores": [
[
0.0321035,
0.905796,
...
]
]
}
}
时导出的旧Inception v3模型(2015)的部署。不过,它与服务0.4.1
一起使用时效果很好。如果您已使用最新的导出脚本导出模型,则可能会有细微的差异(1.11.0-rc1
export script在签名方面似乎没有差异)。因此,此答案可能不适用于您,而只是将您带到解决问题的方式上。