使用Java客户端使用张量流服务启动模型

时间:2018-08-06 10:16:40

标签: java rest spring-boot tensorflow-serving

我所做的是,我已经在Windows上使用Docker部署了张量流服务。我在张量流服务中使用了初始模型。它已启动并正在运行。 现在,我要使用 java ,将来自浏览器的图像上传到在tensorflow服务中运行的初始模型中,作为回应,我应该获得类名。

任何示例示例都会有所帮助。

2 个答案:

答案 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在签名方面似乎没有差异)。因此,此答案可能不适用于您,而只是将您带到解决问题的方式上。