通常要使用TF图,必须将原始数据转换为数值。我将此过程称为预处理步骤。例如,如果原始数据是一个句子,那么一种方法是将句子标记化并将每个单词映射到唯一的数字。此预处理为每个句子创建一个数字序列,这将是模型的输入。
我们还需要对模型的输出进行后处理以解释它。例如,将模型生成的数字序列转换为单词,然后构建句子。
TF Serving是Google最近为TF模型提供服务的新技术。我的问题是:
使用TensorFlow服务提供TF模型时,应该在哪里执行预处理和后处理?
我是否应该在TF图表中封装预处理和后处理步骤(例如,使用py_fun或map_fn),或者还有其他我不知道的TensorFlow技术。
答案 0 :(得分:3)
我在这里遇到同样的问题,即使我还没有100%确定如何使用wordDict变量(我猜你也用它来映射带有id的单词),主要是过程和后处理函数在这里定义:
https://www.tensorflow.org/programmers_guide/saved_model
为export_outputs
和serving_input_receiver_fn
。
exports_outputs
如果您使用的是估算器,则需要在EstimatorSpec
中定义。以下是分类算法的示例
predicted_classes = tf.argmax(logits, 1)
categories_tensor = tf.convert_to_tensor(CATEGORIES, tf.string)
export_outputs = { "categories": export_output.ClassificationOutput(classes=categories_tensor) }
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(
mode=mode,
predictions={
'class': predicted_classes,
'prob': tf.nn.softmax(logits)
},
export_outputs=export_outputs)
serving_input_receiver_fn
在导出训练的估算器模型之前需要定义它,它假定输入是一个原始字符串并从那里解析你的输入,你可以编写自己的函数,但我不确定何时可以使用外部变量。以下是分类算法的一个简单示例:
def serving_input_receiver_fn():
feature_spec = { "words": tf.FixedLenFeature(dtype=tf.int64, shape=[4]) }
return tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)()
export_dir = classifier.export_savedmodel(export_dir_base=args.job_dir,
serving_input_receiver_fn=serving_input_receiver_fn)
希望它有所帮助。