在用于服务模型的Tensorflow中,服务输入函数应该做什么

时间:2018-01-29 21:26:41

标签: python tensorflow tensorflow-serving google-cloud-ml

因此,当Tensorflow中出于训练模型用于服务目的时,我一直在努力理解serve_input_fn()的主要任务是什么。网上有一些例子可以解释它,但我在为自己定义它时遇到了问题。

我试图解决的问题是一个回归问题,我有29个输入和一个输出。是否有用于为其创建相应服务输入功能的模板?如果我使用一类分类问题该怎么办?我的服务输入功能是否需要更改,或者我可以使用相同的功能吗?

最后,我是否总是需要提供输入功能,还是仅当我使用tf.estimator导出我的模型时?

2 个答案:

答案 0 :(得分:7)

如果您希望模型能够进行预测,则需要服务输入功能。 serving_input_fn指定predict()方法的调用者必须提供的内容。您基本上是在告诉模型它必须从用户那里获得哪些数据。

如果您有29个输入,则您的服务输入功能可能如下所示:

def serving_input_fn():
    feature_placeholders = {
      'var1' : tf.placeholder(tf.float32, [None]),
      'var2' : tf.placeholder(tf.float32, [None]),
      ...
    }
    features = {
        key: tf.expand_dims(tensor, -1)
        for key, tensor in feature_placeholders.items()
    }
    return tf.estimator.export.ServingInputReceiver(features, 
                                                    feature_placeholders)

这通常以JSON:

形式出现
{"instances": [{"var1": [23, 34], "var2": [...], ...}]}

P.S。输出不是服务输入函数的一部分,因为这是要预测的输入。 如果您使用的是预先制作的估算器,则输出已经预先确定。如果您正在编写自定义估算器,则需要编写导出签名。

答案 1 :(得分:4)

如果您正在编写自定义Estimator,则服务输入功能将保持与上述相同。这仍然是预测()的输入。

您必须为输出编写预测字典并在创建EstimatorSpec时指定它,会发生什么变化

看一下model.py中的服务输入函数和该目录中task.py中的sequence_regressor:

https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/deepdive/09_sequence/sinemodel/trainer

这是一个自定义回归模型的示例,它采用N个输入并具有一个输出。