0

根据我的研究,TFX 不支持 TFX 管道中的自定义特征转换,因为我的自定义 python 函数无法在图中序列化。因此使所述功能在服务/推理时不可用。

我发现的一种替代方法是通过创建自定义 Servable ( https://www.tensorflow.org/tfx/serving/custom_servable ) 来扩展 TensorFlow Serving,但我还没有找到任何添加特征转换代码的具体示例。

如何围绕 SavedModel 包装特征转换?

4

1 回答 1

0

有不同类型的解决方案:

选项 A:您可以使用TensorFlow Serving为您训练和保存的模型提供服务。然后,您可以为请求预处理和准备数据。之后,您可以使用tensorflow-serving-apiPredictRequest通过 gRPC 向之前启动的服务发送一个:

import tensorflow as tf

from tensorflow_serving.apis.prediction_service_pb2_grpc import (
    PredictionServiceStub
)
from tensorflow_serving.apis.predict_pb2 import (
    PredictRequest,
    PredictResponse,
)


values: List[float] = # ... YOUR PREPROCESSED DATA ...

host, port = '0.0.0.0', 8500
channel = grpc.insecure_channel(f'{host}:{port}')
stub = PredictionServiceStub(channel)

request = PredictRequest()
request.model_spec.name = 'cifar10'
request.model_spec.signature_name = 'serving_default'
tensor_proto = tf.make_tensor_proto(
    values=values,
    shape=(1, 32, 32, 3),
    dtype=float
)
request.inputs['input'].CopyFrom(tensor_proto)
response: PredictResponse = stub.Predict(request)
result = response.outputs['output'].float_val

选项 B:您可以尝试使用LambdaLayers将预处理步骤嵌入到模型中。我从未尝试过,但如果你想使用自定义导入和依赖项,你应该小心,因为如果我们使用常规load_model方法来加载保存的模型,我们必须应用 required custom_objects

于 2021-02-15T23:34:21.513 回答