当使用TensorFlow服务提供TF模型时,应在何处执行预处理和后处理步骤?

当使用TensorFlow服务提供TF模型时,应在何处执行预处理和后处理步骤?,tensorflow,tensorflow-serving,Tensorflow,Tensorflow Serving,通常要使用TF图,必须将原始数据转换为数值。我将此过程称为预处理步骤。例如,如果原始数据是一个句子,一种方法是对句子进行标记,并将每个单词映射到一个唯一的数字。此预处理为每个句子创建一个数字序列,该序列将作为模型的输入 我们还需要对模型的输出进行后处理以对其进行解释。例如,将模型生成的数字序列转换为单词,然后构建一个句子 谷歌最近推出了一项新技术,为TF模式提供服务。我的问题是: 当TF模型使用TensorFlow服务时,应在何处执行预处理和后处理 我应该在TF图中封装预处理和后处理步骤(例如使

通常要使用TF图,必须将原始数据转换为数值。我将此过程称为预处理步骤。例如,如果原始数据是一个句子,一种方法是对句子进行标记,并将每个单词映射到一个唯一的数字。此预处理为每个句子创建一个数字序列,该序列将作为模型的输入

我们还需要对模型的输出进行后处理以对其进行解释。例如,将模型生成的数字序列转换为单词,然后构建一个句子

谷歌最近推出了一项新技术,为TF模式提供服务。我的问题是:

当TF模型使用TensorFlow服务时,应在何处执行预处理和后处理


我应该在TF图中封装预处理和后处理步骤(例如使用or),还是有另一种我不知道的TensorFlow技术

我在这里讨论了同样的问题,即使我还不是100%确定如何使用wordDict变量(我猜您也使用了一个变量来映射单词及其ID),主要的预处理和后处理函数在这里定义:

作为
导出\u输出
服务\u输入\u接收器\u fn

  • 导出\u输出
如果您使用的是估计器,则需要在
estimator spec
中定义。下面是一个分类算法的示例

predicted_classes=tf.argmax(logits,1)
categories\u tensor=tf.convert\u to\u tensor(categories,tf.string)
导出输出={“类别”:导出输出。分类输出(类别=类别张量)}
如果mode==tf.estimator.ModeKeys.PREDICT:
返回tf.estimator.estimator规范(
模式=模式,
预言={
“类”:预测的类,
'prob':tf.nn.softmax(logits)
},
导出输出=导出输出)
  • 服务输入接收器fn
在导出经过训练的估计器模型之前,需要在上定义它,它假设输入是原始字符串并从那里解析输入,您可以编写自己的函数,但我不确定何时可以使用外部变量。下面是一个简单的分类算法示例:

def服务于输入接收器()
feature_spec={“words”:tf.FixedLenFeature(dtype=tf.int64,shape=[4])
返回tf.estimator.export.build\u parsing\u service\u input\u receiver\u fn(特性规格)()
export\u dir=classifier.export\u savedmodel(export\u dir\u base=args.job\u dir,
服务\输入\接收器\ fn=服务\输入\接收器\ fn)

希望有帮助。

谢谢您的解决方案。据我所知,这种方法节省了图形中的预处理和后处理步骤。这意味着这些步骤应限制仅使用TensorFlow Ops。这是一个很大的限制,在某些应用程序中很难实现。例如,对于文本标记化,一种简单的方法是使用正则表达式将文本拆分为标记。将其转换为Tensorflow Ops并非易事。没错,但这似乎是使用谷歌在此描述的文本处理算法的方法。感谢您的链接,这是一篇有趣的文章。然而,据我所知,在代码中,假设预处理是在Tensorflow之外完成的。检查此代码:
tf.constant('Some title'.split())
例如,其中标记输入文本。我能够将解决方案与此代码结合起来。正在使用
cnn_model
函数第一行中的算法进行处理,导出的模型在
exports/Servo/{id}/assets
中包含单词dict,并且与文本输入一样工作。py_fun不能像前面提到的那样是一个解决方案:tf.py_func()操作具有以下已知限制:函数体(即func)不会在GraphDef中序列化。因此,如果需要序列化模型并在其他环境中还原它,则不应使用此函数。是否解决过此问题?似乎
tf.transform
还不能支持复杂的标记化。据我所知,没有简单的方法来处理这个问题。理想情况下,您希望使用Tensorflow操作(或添加必要的操作)来实现预处理/后处理步骤,并使用tf.transform将这些操作与tf图一起发送。然而,正如您可能猜到的,添加一个新的TF OPs并不是一个简单的任务,这为实现预处理/后处理步骤增加了很多限制。当然,您可以在图形之外进行前/后处理,但这不是一个理想的解决方案。这是我现在使用tensorflow服务的首要问题。我在tensorflow中做了一个关于这个主题的演讲。