GRS*_*GRS 5 keras tensorflow apache-beam google-cloud-ml
简短问题:
由于Tensorflow朝着Keras方向发展而远离Estimators,我们如何将我们的预处理管道(例如,使用tf.Transform和build_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)
Run Code Online (Sandbox Code Playgroud)
定义模型时,我使用Functional API,并且模型具有以下输入:
for i in numerical_features:
num_inputs.append(tf.keras.layers.Input(shape=(1,), name=i))
Run Code Online (Sandbox Code Playgroud)
这是问题所在,因为张量不是直接从tf.Dataset输入到keras中,而是使用该Input()层链接。
使用导出模型时tf.contrib.saved_model.save_keras_model(model=model, saved_model_path=saved_model_path),如果我在单独的脚本中进行预处理,则可以很容易地提供预测。这样的输出看起来像

这是一般情况吗?例如,我将这些功能作为某些外部脚本的一部分进行预处理,然后发送transformed_features到模型进行预测。
理想情况下,它们都将在Keras模型/单个图形的一部分内发生。目前看来,我正在使用一个图的输出作为另一图的输入。相反,我希望能够使用单个图形。
如果使用估算器,我们可以构建一个serving_input_fn(),可以将其作为估算器的参数包括在内,这使我们可以将预处理逻辑合并到图形中。
我也想听听您关于使用Cloud ML服务模型的Keras + SavedModel +预处理想法
blu*_*yke -2
Cloud ML是 Google Clouds 机器学习的一种方式。
\n\n使用他们的文档来开始和训练 UI非常简单:
\n\n\n\n\n在本地开发和验证您的培训应用程序
\n\n在云中运行训练应用程序之前,请先在本地运行它。本地环境提供高效的开发和验证工作流程,以便您可以快速迭代。在本地调试应用程序时,您也不会产生云资源费用。获取您的训练数据
\n\n相关数据文件“adult.data”和“adult.test”托管在\n 公共 Cloud Storage 存储桶中。出于本示例的目的,\n 使用 Cloud Storage 上经过一些简单清理的版本,\n 而不是原始源数据。有关数据的更多信息,请参阅下文。
\n\n您可以直接从 Cloud Storage 读取数据文件或将其复制到\n 到本地环境。出于此示例的目的,您将\n 下载示例以进行本地训练,然后将其上传到\n 您自己的 Cloud Storage 存储桶以进行云训练。\n 将数据下载到文件夹:
\n
mkdir data\ngsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/\nRun Code Online (Sandbox Code Playgroud)\n\n然后,只需将 TRAIN_DATA 和 EVAL_DATA 变量设置为本地文件路径。例如,以下命令将变量设置为本地路径。
\n\nTRAIN_DATA=$(pwd)/data/adult.data.csv\nEVAL_DATA=$(pwd)/data/adult.test.csv\nRun Code Online (Sandbox Code Playgroud)\n\n然后你就有了一个像这样的 TSV 文件:
\n\n39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K\n50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, Husband, White, Male, 0, 0, 13, United-States, <=50K\n38, Private, 215646, HS-grad, 9, Divorced, Handlers-cleaners, Not-in-family, White, Male, 0, 0, 40, United-States, <=50K\n53, Private, 234721, 11th, 7, Married-civ-spouse, Handlers-cleaners, Husband, Black, Male, 0, 0, 40, United-States, <=50K\nRun Code Online (Sandbox Code Playgroud)\n\n运行它:
\n\ngcloud ml-engine local train \\\n --module-name trainer.task \\\n --package-path trainer/ \\\n --job-dir $MODEL_DIR \\\n -- \\\n --train-files $TRAIN_DATA \\\n --eval-files $EVAL_DATA \\\n --train-steps 1000 \\\n --eval-steps 100\nRun Code Online (Sandbox Code Playgroud)\n\n对于更多培训注意事项,如您的问题所述:
\n\n\n\n运行训练作业
\n\n云机器学习引擎以异步(批量)服务的形式提供模型训练。本页面介绍如何配置和提交训练作业,\n 通过从命令行运行 gcloud ml-engine jobssubmittraining\n 或向位于\nprojects.jobs.create 的 API 发送请求\n 来配置和提交训练作业。在你开始之前
\n\n在提交训练作业之前,您必须打包您的应用程序并将其和任何异常依赖项上传到云存储存储桶。注意:如果您使用 gcloud 命令行工具提交作业,则可以在同一步骤中打包应用程序并提交作业。配置作业
\n\n您可以通过设置作业资源的成员将参数传递给训练服务,其中包括 TrainingInput 资源中的项目。
\n\n如果您使用 gcloud 命令行工具提交训练作业,\n您可以:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nSpecify the most common training parameters as flags of the gcloud ml-engine jobs submit training command.\nPass the remaining parameters in a YAML configuration file, named config.yaml by convention. The configuration file mirrors the\n作业资源的 JSON 表示形式的结构。您可以在 gcloud\n ml-engine jobs Submit 训练命令的 --config 标志中传递配置文件的路径。因此,如果配置文件的路径是 config.yaml,则必须设置 --config=config.yaml。
\n\n收集作业配置数据
\n\n以下属性用于定义您的工作。
\n\n作业名称 (jobId)\n 用于作业的名称(仅混合大小写字母、数字和下划线,以字母开头)。群集配置\n (scaleTier)\n 指定运行作业的处理群集类型的缩放层。这可以是自定义规模层,在这种情况下,您还\n 显式指定要使用的计算机的数量和类型。培训\n 应用程序包 (packageUris)\n 暂存于 Cloud Storage 位置的打包培训应用程序。如果您使用 gcloud 命令行工具,\n 应用程序打包步骤基本上是自动化的。请参阅打包应用程序指南中的详细信息。模块名称 (pythonModule)\n 包中主模块的名称。主模块是您调用以启动应用程序的Python 文件。如果您使用 gcloud 命令提交作业,请在 --module-name 标志中指定主模块名称。请参阅打包应用程序的指南。区域(区域)\n 您希望运行作业的 Compute Engine 区域。您应该在存储训练数据的 Cloud Storage 存储桶所在的区域运行训练作业。\n 查看\n Cloud ML Engine 服务的可用区域。作业目录 (jobDir)\n 用于作业输出的 Cloud Storage 位置的路径。大多数训练应用程序会在训练期间保存检查点,并在作业结束时将训练后的模型保存到文件中。您需要一个云存储位置来保存它们。您的 Google Cloud Platform 项目\n必须具有对此存储桶的写入权限。训练服务会自动将您为作业目录设置的路径作为名为 job_dir 的命令行参数传递到训练应用程序。您可以将其与应用程序的其他参数一起解析,并在代码中使用它。使用作业目录的优点是训练服务会在启动应用程序之前验证该目录。运行时版本(runtimeVersion)
\n\nRun Code Online (Sandbox Code Playgroud)\n\nThe Cloud ML Engine version to use for the job. If you don\'t specify a runtime version, the training service uses the default Cloud\nML Engine 运行时版本 1.0。Python版本(pythonVersion)
\n\nRun Code Online (Sandbox Code Playgroud)\n\nThe Python version to use for the job. Python 3.5 is available with Cloud ML Engine runtime version 1.4 or greater. If you don\'t\n指定Python版本,训练服务使用Python 2.7。
\n\n格式化您的配置参数
\n\n如何指定配置详细信息取决于您\n 启动训练作业的方式:\n 向 gcloud ml-engine 作业提供作业配置详细信息\n 提交训练命令。您可以通过两种方式执行此操作:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nWith command-line flags.\nIn a YAML file representing the Job resource. You can name this file whatever you want. By convention the name is config.yaml.\n即使您使用 YAML 文件,也必须以命令行标志的形式提供某些详细信息。例如,您必须提供 --module-name\n 标志以及至少 --package-path 或 --packages 之一。如果您使用\n --package-path,则还必须包含 --job-dir 或 --staging-bucket。此外,您必须提供 --region 标志或为 gcloud 客户端设置\n 默认区域。这些选项\xe2\x80\x94 以及您作为命令行标志\xe2\x80\x94 提供的任何其他选项\n 将覆盖配置文件中这些\n 选项的值。
\n\n示例 1:在此示例中,您选择一个预配置的计算机集群,并在提交作业时提供所有必需的详细信息作为命令行标志。不需要配置文件。请参阅下一节中提交作业的指南。
\n\n示例 2:以下示例显示具有自定义处理集群的作业的\n 配置文件的内容。配置文件包含一些但不是全部配置详细信息,假设您在提交作业时提供了其他必需的详细信息作为命令行标志。
\n\nTrainingInput:scaleTier:CUSTOM masterType:complex_model_m
\n\n
\nworkerType:complex_model_mparameterServerType:large_model
\nworkerCount:9parameterServerCount:3runtimeVersion:\'1.13\'
\n pythonVersion:\'3.5\'上面的示例指定了 Python 版本 3.5,当您使用 Cloud ML Engine 运行时版本 1.4 或更高版本时,\n 可用。
\n\n提交作业
\n\n提交训练作业时,您指定两组标志:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nJob configuration parameters. Cloud ML Engine needs these values to set up resources in the cloud and deploy your application on each\n处理群集中的节点。\n 用户参数或应用程序参数。Cloud ML Engine 将这些标志的值传递到您的应用程序。
\n\n使用 gcloud ml-engine jobs Submit Training\n 命令提交训练作业。
\n\n首先,定义一些包含配置详细信息的环境变量很有用。要创建作业名称,请使用以下代码\n 将日期和时间附加到模型名称中:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nTRAINER_PACKAGE_PATH="/path/to/your/application/sources"\nnow=$(date +"%Y%m%d_%H%M%S")\nJOB_NAME="your_name_$now"\nMAIN_TRAINER_MODULE="trainer.task"\nJOB_DIR="gs://your/chosen/job/output/path"\nPACKAGE_STAGING_PATH="gs://your/chosen/staging/path"\nREGION="us-east1"\nRUNTIME_VERSION="1.13"\n以下作业提交对应于上面的配置示例 1\n,其中您选择预配置的规模层(基本),并决定通过命令行标志提供所有配置详细信息。\n 不需要配置。 yaml 文件:
\n\nRun Code Online (Sandbox Code Playgroud)\n\ngcloud ml-engine jobs submit training $JOB_NAME \\\n --scale-tier basic \\\n --package-path $TRAINER_PACKAGE_PATH \\\n --module-name $MAIN_TRAINER_MODULE \\\n --job-dir $JOB_DIR \\\n --region $REGION \\\n -- \\\n --user_first_arg=first_arg_value \\\n --user_second_arg=second_arg_value\n以下作业提交对应于上面的配置示例 2\n,其中一些配置位于文件中,并且您通过命令行标志提供\n 其他详细信息:
\n\nRun Code Online (Sandbox Code Playgroud)\n\ngcloud ml-engine jobs submit training $JOB_NAME \\\n --package-path $TRAINER_PACKAGE_PATH \\\n --module-name $MAIN_TRAINER_MODULE \\\n --job-dir $JOB_DIR \\\n --region $REGION \\\n --config config.yaml \\\n -- \\\n --user_first_arg=first_arg_value \\\n --user_second_arg=second_arg_value\n笔记:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nIf you specify an option both in your configuration file (config.yaml) and as a command-line flag, the value on the command\n行会覆盖配置文件中的值。\n 空 -- 标志标记 gcloud 特定标志的结束以及您要传递给应用程序的 USER_ARGS 的开始。\n 特定于 Cloud ML Engine 的标志,例如--module-name、--runtime-version 和 --job-dir 必须位于空 -- 标志之前。Cloud ML Engine 服务解释这些标志。\n --job-dir 标志(如果指定)必须位于空 -- 标志之前,因为 Cloud ML Engine 使用 --job-dir 来验证路径。\n如果指定的话,应用程序也必须处理 --job-dir 标志。即使该标志位于空 -- 之前,--job-dir 也会作为命令行标志传递到您的应用程序。\n 您可以根据需要定义任意多个 USER_ARGS。Cloud ML Engine 将 --user_first_arg、--user_second_arg 等传递到您的应用程序。\n
\n
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |