tensorflow - 在服务时在 Keras 模型中包含 BEAM 预处理图

标签 tensorflow keras apache-beam google-cloud-ml

简短问题:

由于 Tensorflow 正在转向 Keras 而远离 Estimator,我们如何整合我们的预处理管道,例如使用 tf.Transformbuild_serving_input_fn() (用于估算器),进入我们的 tf.keras楷模?

根据我的理解,合并这个预处理图的唯一方法是首先使用 Keras 构建模型。训练它。然后使用 tf.keras.estimator.model_to_estimator 将其导出为估算器.然后创建一个 serving_input_fn并将估算器导出为保存的模型,以及此 serving_input_fn在服务时间使用。

对我来说,这似乎很乏味,而且不是正确的做事方式。相反,我想直接从 Keras 转到 Saved Model。

问题

我希望能够在 Keras 保存的模型中包含 APAHCE BEAM 预处理图。

我想提供经过训练的 Keras 模型,因此我使用 SavedModel 导出它。给定一个经过训练的模型,我想应用以下逻辑来预测结果。

raw_features = { 'feature_col_name': [100] } # features to transform
working_dir = 'gs://path_to_transform_fn' 

# transform features
transformed_features = tf_transform_output.transform_raw_features(raw_features)

model = load_model('model.h5')
model.predict(x=transformed_features)

当我定义我的模型时,我使用 Functional API 并且模型具有以下输入:
for i in numerical_features:
    num_inputs.append(tf.keras.layers.Input(shape=(1,), name=i))

这就是问题所在,因为张量不是从 tf.Dataset 直接输入到 keras 中,而是使用 Input() 链接的。层。

当我使用 tf.contrib.saved_model.save_keras_model(model=model, saved_model_path=saved_model_path) 导出模型时,如果我在单独的脚本中处理预处理,我可以很容易地提供预测。这个的输出看起来像
enter image description here

这是通常发生的事情吗?例如,我会将特征作为某些外部脚本的一部分进行预处理,然后发送 transformed_features到模型进行预测。

理想情况下,这一切都发生在 Keras 模型/单个图的一部分中。目前似乎我正在使用一个图形的输出作为另一个图形的输入。相反,我希望能够使用单个图形。

如果使用 Estimators,我们可以构建一个 serving_input_fn()它可以作为估计器的参数包含在内,这允许我们将预处理逻辑合并到图中。

我也想听听您关于使用 Cloud ML 服务模型的 Keras + SavedModel + Preprocessing 想法

最佳答案

有关将 Apache Beam 合并到 tf.transform 管道的输入函数的问题,请参阅此 TF 教程,其中解释了如何执行此操作:

"https://www.tensorflow.org/tfx/transform/get_started#apache_beam_implementation

在将 TF 2.0 SavedModel 与 Keras 一起使用时,本笔记本教程演示了如何执行此操作:

https://www.tensorflow.org/beta/guide/keras/saving_and_serializing#export_to_savedmodel

关于tensorflow - 在服务时在 Keras 模型中包含 BEAM 预处理图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104136/

相关文章:

python - Keras MNIST 目标向量自动转换为 one-hot?

java - 数据流 : string to pubsub message

java - GCP Dataflow 抛出异常 Shuffle key 太大

google-cloud-platform - Dataflow 如何自动扩展和分配工作负载?

Tensorflow 编译加速 CPU

python - 使用 TensorBoard 和 Keras 创建日志文件时出错

optimization - Tensorflow 加载预训练模型使用不同的优化器

tensorflow - 将元数据添加到tensorflow lite文件

python - 如何获得预测 future 的后续(下一个)值?

deep-learning - 如何在使用图像增强时确定steps_per_epoch,因为它会增加图像的数量