因此,当Tensorflow中出于训练模型用于服务目的时,我一直在努力理解serve_input_fn()的主要任务是什么。网上有一些例子可以解释它,但我在为自己定义它时遇到了问题。
我试图解决的问题是一个回归问题,我有29个输入和一个输出。是否有用于为其创建相应服务输入功能的模板?如果我使用一类分类问题该怎么办?我的服务输入功能是否需要更改,或者我可以使用相同的功能吗?
最后,我是否总是需要提供输入功能,还是仅当我使用tf.estimator导出我的模型时?
答案 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:
这是一个自定义回归模型的示例,它采用N个输入并具有一个输出。