使用“tf.contrib.predictor”预测来自“tf.estimator.export_savedmodel”的 TF 1.13 的批次

Use `tf.contrib.predictor` to predict on batches from `tf.estimator.export_savedmodel` for TF 1.13

我找到了几个示例来加载我保存的估算器 my_estimator.export_savedmodel(export_dir, export_input_fn) 模型,作为像这样的预测器 predictor = tf.contrib.predictor.from_saved_model(export_dir)。当我的 tf.train.Example 只有一项时,这非常有用。我怎样才能使它适用于 TF 1.13 的批处理?

model_input= tf.train.Example(features=tf.train.Features(feature={
      'browser_name': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b"chrome", b"ie"])),
      'version': tf.train.Feature(float_list=tf.train.FloatList(value=[8.0, 11.0]))     
  })).SerializeToString()
predictor({"inputs":[model_input]})

当每个特征有多个输入时调用失败。

predictor({"inputs":[model_input1, model_input2]})

可行,但这需要将数据手动枚举到多个 tf.train.Example 实例中

这是一个使用 tensorflow 1.13.1 的工作示例:

import tensorflow as tf
import pandas as pd 
import numpy as np


prod_export_dir = 'my_model_dir'
data =  pd.read_csv('my_data.csv')

predictor = tf.contrib.predictor.from_saved_model(prod_export_dir)

model_input = {}
for k, v in predictor.feed_tensors.items():
    model_input[k] = np.array(data[k].tolist(), dtype=v.dtype.as_numpy_dtype)

prediction = predictor(model_input)