如何在一个服务器调用中将请求对象的列表/数组传递给tensorflow?
加载wide和deep模型后,我能够使用特性映射对一个请求对象进行预测,然后将其序列化为字符串以进行预测,如下所示- 有没有一种方法可以创建一批请求对象并将它们发送到tensorflow服务器进行预测? 单个预测的代码如下所示-如何在一个服务器调用中将请求对象的列表/数组传递给tensorflow?,tensorflow,tensorflow-serving,Tensorflow,Tensorflow Serving,加载wide和deep模型后,我能够使用特性映射对一个请求对象进行预测,然后将其序列化为字符串以进行预测,如下所示- 有没有一种方法可以创建一批请求对象并将它们发送到tensorflow服务器进行预测? 单个预测的代码如下所示- for (each feature in feature list) { Feature feature = null; feature = Feature.newBuilder().setBytesList(BytesList.newBuilder()
for (each feature in feature list) {
Feature feature = null;
feature = Feature.newBuilder().setBytesList(BytesList.newBuilder().addValue(ByteString.copyFromUtf8("dummy string"))).build();
if (feature != null) {
inputFeatureMap.put(name, feature);
}
}
是否有一种方法可以发送预测对象的功能列表,类似于此-
List
={通过某种方式创建可以转换为序列化字符串的inputFeatureMap数组/列表。}对于任何在这里遇到障碍的人,我找到了一个简单的解决方法,其中包含示例proto to do批处理请求。我将借用问题中的代码,并为批处理修改它
Features features =
Features.newBuilder()
.putFeature("Attribute1", feature("A12"))
.putFeature("Attribute2", feature(12))
.putFeature("Attribute3", feature("A32"))
.putFeature("Attribute4", feature("A40"))
.putFeature("Attribute5", feature(7472))
.putFeature("Attribute6", feature("A65"))
.putFeature("Attribute7", feature("A71"))
.putFeature("Attribute8", feature(1))
.putFeature("Attribute9", feature("A92"))
.putFeature("Attribute10", feature("A101"))
.putFeature("Attribute11", feature(2))
.putFeature("Attribute12", feature("A121"))
.putFeature("Attribute13", feature(24))
.putFeature("Attribute14", feature("A143"))
.putFeature("Attribute15", feature("A151"))
.putFeature("Attribute16", feature(1))
.putFeature("Attribute17", feature("A171"))
.putFeature("Attribute18", feature(1))
.putFeature("Attribute19", feature("A191"))
.putFeature("Attribute20", feature("A201"))
.build();
Example example = Example.newBuilder().setFeatures(features).build();
String pfad = System.getProperty("user.dir") + "\\1511523781";
try (SavedModelBundle model = SavedModelBundle.load(pfad, "serve")) {
Session session = model.session();
final String xName = "input_example_tensor";
final String scoresName = "dnn/head/predictions/probabilities:0";
try (Tensor<String> inputBatch = Tensors.create(new byte[][] {example.toByteArray(), example.toByteArray(), example.toByteArray(), example.toByteArray()});
Tensor<Float> output =
session
.runner()
.feed(xName, inputBatch)
.fetch(scoresName)
.run()
.get(0)
.expect(Float.class)) {
System.out.println(Arrays.deepToString(output.copyTo(new float[4][2])));
}
}
功能=
Features.newBuilder()
.putFeature(“属性1”,特征(“A12”))
.putFeature(“属性2”,特征(12))
.putFeature(“属性3”,特征(“A32”))
.putFeature(“属性4”,特征(“A40”))
.putFeature(“属性5”,特征(7472))
.putFeature(“属性6”,特征(“A65”))
.putFeature(“属性7”,特征(“A71”))
.putFeature(“属性8”,特征(1))
.putFeature(“属性9”,特征(“A92”))
.putFeature(“属性10”,特征(“A101”))
.putFeature(“属性11”,特征(2))
.putFeature(“属性12”,特征(“A121”))
.putFeature(“属性13”,特征(24))
.putFeature(“属性14”,特征(“A143”))
.putFeature(“属性15”,特征(“A151”))
.putFeature(“属性16”,特征(1))
.putFeature(“属性17”,特征(“A171”))
.putFeature(“属性18”,特征(1))
.putFeature(“属性19”,特征(“A191”))
.putFeature(“属性20”,特征(“A201”))
.build();
Example=Example.newBuilder().setFeatures(features).build();
字符串pfad=System.getProperty(“user.dir”)+“\\1511523781”;
try(SavedModelBundle model=SavedModelBundle.load(pfad,“service”)){
会话=model.Session();
最终字符串xName=“输入\示例\张量”;
最终字符串scoresName=“dnn/head/predictions/probability:0”;
try(Tensor inputBatch=Tensors.create(新字节[]{example.toByteArray(),example.toByteArray(),example.toByteArray(),example.toByteArray()});
张量输出=
一场
.runner()
.feed(xName,inputBatch)
.fetch(scoresName)
.run()
.get(0)
.expect(Float.class)){
System.out.println(Arrays.deepToString(output.copyTo(newfloat[4][2]));
}
}
基本上,您可以将每个示例作为对象传递到字节[4][
中,您将收到相同形状的结果浮点[4][2]
Features features =
Features.newBuilder()
.putFeature("Attribute1", feature("A12"))
.putFeature("Attribute2", feature(12))
.putFeature("Attribute3", feature("A32"))
.putFeature("Attribute4", feature("A40"))
.putFeature("Attribute5", feature(7472))
.putFeature("Attribute6", feature("A65"))
.putFeature("Attribute7", feature("A71"))
.putFeature("Attribute8", feature(1))
.putFeature("Attribute9", feature("A92"))
.putFeature("Attribute10", feature("A101"))
.putFeature("Attribute11", feature(2))
.putFeature("Attribute12", feature("A121"))
.putFeature("Attribute13", feature(24))
.putFeature("Attribute14", feature("A143"))
.putFeature("Attribute15", feature("A151"))
.putFeature("Attribute16", feature(1))
.putFeature("Attribute17", feature("A171"))
.putFeature("Attribute18", feature(1))
.putFeature("Attribute19", feature("A191"))
.putFeature("Attribute20", feature("A201"))
.build();
Example example = Example.newBuilder().setFeatures(features).build();
String pfad = System.getProperty("user.dir") + "\\1511523781";
try (SavedModelBundle model = SavedModelBundle.load(pfad, "serve")) {
Session session = model.session();
final String xName = "input_example_tensor";
final String scoresName = "dnn/head/predictions/probabilities:0";
try (Tensor<String> inputBatch = Tensors.create(new byte[][] {example.toByteArray(), example.toByteArray(), example.toByteArray(), example.toByteArray()});
Tensor<Float> output =
session
.runner()
.feed(xName, inputBatch)
.fetch(scoresName)
.run()
.get(0)
.expect(Float.class)) {
System.out.println(Arrays.deepToString(output.copyTo(new float[4][2])));
}
}