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

In Tensorflow for serving a model, what does the serving input function supposed to do exactly

所以,我一直在努力理解 serving_input_fn() 的主要任务是将经过训练的模型导出到 Tensorflow 中以用于服务目的。网上有一些例子可以解释它,但我自己定义它时遇到了问题。

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

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

如果您希望模型能够进行预测,则需要服务输入函数。 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。输出不是服务输入函数的一部分,因为这是关于要预测的输入。 如果您使用的是预制估算器,则输出已经预先确定。如果您正在编写自定义估算器,则需要编写导出签名。

如果您正在编写自定义 Estimator,则服务输入函数与上述相同。这仍然是 predict() 的输入。

不同之处在于您必须为输出编写预测字典并在创建 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 个输入并具有一个输出。