来自输入功能的Tensorflow Serving Transform数据

时间:2019-03-20 23:55:04

标签: python tensorflow tensorflow-serving

目前,我正在研究张量流模型。该模型基于2个字符串和一个数字对情况进行分类。因此,我的占位符如下所示:

Input1 = tf.placeholder("string", shape=None, name="string1")
Input2 = tf.placeholder("string", shape=None, name="string2")
Input3 = tf.placeholder("float", shape=None, name="distance")
label = tf.placeholder("int64", shape=None, name="output")

我想通过Tensorflow为该模型提供服务通过以下代码提供服务:

    signature_definition = tf.saved_model.signature_def_utils.build_signature_def(
        inputs={'input1': model_input1, 'input2': model_input2, 'input3': model_input3},
        outputs={'outputs': model_output},
        method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)

    builder = tf.saved_model.builder.SavedModelBuilder(SERVE_PATH)

    builder.add_meta_graph_and_variables(
        sess, [tf.saved_model.tag_constants.SERVING],
        signature_def_map={
            tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
                signature_definition
        }) 

但是我编写的模型希望将字符串作为one_hot编码输入。有人知道如何将输入张量转换为one_hot编码的张量,并将其输入到我的模型中吗? 训练模型时,我在给模型添加函数之前对其进行了转换。服务期间这似乎是不可能的,因为我只能定义一个输入函数,而不能定义inputdata的流。

1 个答案:

答案 0 :(得分:0)

tf.one_hot提供一种热编码。

但是,更广泛地说,您需要协调培训和服务以使用相同的索引。 Tensorflow Transform提供了一种方法,可以在训练数据处理阶段进行许多转换(一站式,缩放,桶化),包括一站式编码,并将该变换保存为模型图的一部分,因此自动重新应用相同的变换在服务时间,节省您的手动工作。通过以下链接查看他们的示例:

示例:https://www.tensorflow.org/tfx/transform/tutorials/TFT_simple_example

示例2:https://github.com/tensorflow/transform/blob/master/examples/sentiment_example.py

完整的Python API:https://www.tensorflow.org/tfx/transform/api_docs/python/tft

您要查找的功能是tft.compute_and_apply_vocabulary。