java请求tensorflow-serving服务,返回模型结果

本文介绍如何使用Java客户端调用TensorFlow Serving服务进行预测,并提供了完整的代码示例及依赖配置。通过该示例,读者可以了解如何构建请求、设置参数以及解析返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型是前面训练一个简单的模型,用java调有个前提要是1.8的版本,有个jar包是1.8编译的,低版本会报错,先看下maven依赖,参考https://blog.youkuaiyun.com/shin627077/article/details/78592729

<dependency>
            <groupId>com.yesup.oss</groupId>
            <artifactId>tensorflow-client</artifactId>
            <version>1.4-2</version>
        </dependency>
   
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-boringssl-static</artifactId>
            <version>2.0.7.Final</version>
        </dependency>

在tensorflow-serving服务已经启动的前提下,看下java调用的逻辑:

package com.meituan.test;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

import java.util.Arrays;
import java.util.List;

import org.tensorflow.framework.DataType;
import org.tensorflow.framework.TensorProto;
import org.tensorflow.framework.TensorShapeProto;

import tensorflow.serving.Model;
import tensorflow.serving.Predict;
import tensorflow.serving.PredictionServiceGrpc;
public class App {
	public static void main(String[] args) {
		List<Float> floatList =Arrays.asList(1.0f,2.0f,0.5f);
		ManagedChannel channel = ManagedChannelBuilder.forAddress("0.0.0.0", 9000).usePlaintext(true).build();
		//这里还是先用block模式
		PredictionServiceGrpc.PredictionServiceBlockingStub stub = PredictionServiceGrpc.newBlockingStub(channel);
		//创建请求
		Predict.PredictRequest.Builder predictRequestBuilder = Predict.PredictRequest.newBuilder();
		//模型名称和模型方法名预设
		Model.ModelSpec.Builder modelSpecBuilder = Model.ModelSpec.newBuilder();
		modelSpecBuilder.setName("example_model");
		modelSpecBuilder.setSignatureName("prediction");
		predictRequestBuilder.setModelSpec(modelSpecBuilder);
		//设置入参,访问默认是最新版本,如果需要特定版本可以使用tensorProtoBuilder.setVersionNumber方法
		TensorProto.Builder tensorProtoBuilder = TensorProto.newBuilder();
		tensorProtoBuilder.setDtype(DataType.DT_FLOAT);
		TensorShapeProto.Builder tensorShapeBuilder = TensorShapeProto.newBuilder();
		
		tensorShapeBuilder.addDim(TensorShapeProto.Dim.newBuilder().setSize(1));
		tensorShapeBuilder.addDim(TensorShapeProto.Dim.newBuilder().setSize(3));
		tensorProtoBuilder.setTensorShape(tensorShapeBuilder.build());
		tensorProtoBuilder.addAllFloatVal(floatList);
		predictRequestBuilder.putInputs("input", tensorProtoBuilder.build());
		//访问并获取结果
		Predict.PredictResponse predictResponse = stub.predict(predictRequestBuilder.build());
		org.tensorflow.framework.TensorProto result=predictResponse.toBuilder().getOutputsOrThrow("output");
		System.out.println("预测值是:"+result.getFloatValList());
	

	}

}

看下结果:



python结果:


结果一模一样


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值