gpt4 book ai didi

python - FAILED_PRECONDITION : Error: SavedModel directory gs://mybucket1/is expected contain exactly one of [saved_model. pb,saved_model.pbtxt]

转载 作者:行者123 更新时间:2023-11-30 08:59:23 25 4
gpt4 key购买 nike

我正在尝试使用谷歌云平台部署模型来支持预测。

我使用以下指令(本地)训练模型

    ~/$ gcloud ml-engine local train --module-name trainer.task --package-path trainer

一切正常(...):

    INFO:tensorflow:Restoring parameters from gs://my-bucket1/test2/model.ckpt-45000
INFO:tensorflow:Saving checkpoints for 45001 into gs://my-bucket1/test2/model.ckpt.
INFO:tensorflow:loss = 17471.6, step = 45001
[...]
Loss: 144278.046875
average_loss: 1453.68
global_step: 50000
loss: 144278.0
INFO:tensorflow:Restoring parameters from gs://my-bucket1/test2/model.ckpt-50000
Mean Square Error of Test Set = 593.1018482

但是,当我运行以下命令来创建版本时,

    gcloud ml-engine versions create Mo1 --model mod1 --origin gs://my-bucket1/test2/ --runtime-version 1.3

然后我收到以下错误。

    ERROR: (gcloud.ml-engine.versions.create) FAILED_PRECONDITION: Field: version.deployment_uri 
Error: SavedModel directory gs://my-bucket1/test2/ is expected to contain exactly one
of: [saved_model.pb, saved_model.pbtxt].- '@type': type.googleapis.com/google.rpc.BadRequest
fieldViolations:- description: 'SavedModel directory gs://my-bucket1/test2/ is expected
to contain exactly one of: [saved_model.pb, saved_model.pbtxt].'
field: version.deployment_uri

这是我的存储桶的屏幕截图。我有一个保存的模型,格式为“pbtxt”

my-bucket-image

最后,我添加了将模型保存在存储桶中的代码段。

  regressor = tf.estimator.DNNRegressor(feature_columns=feature_columns,
hidden_units=[40, 30, 20],
model_dir="gs://my-bucket1/test2",
optimizer='RMSProp'
)

最佳答案

您会注意到屏幕截图中的文件是 graph.pbtxt,而需要 saved_model.pb{txt}

请注意,仅重命名文件通常是不够的。训练过程会定期输出检查点,以防发生重新启动和需要恢复。然而,这些检查点(和相应的图表)是训练图表。训练图往往包含文件读取器、输入队列、丢失层等不适合服务的东西。

相反,TensorFlow 要求您显式导出单独的图表以进行服务。您可以通过以下两种方式之一执行此操作:

  1. 训练期间(通常是训练完成后)
  2. 作为训练后的一个单独过程。

训练期间/训练后

为此,我将向您推荐 Census sample .

首先,您需要一个“服务输入函数”,例如

def serving_input_fn():
"""Build the serving inputs."""
inputs = {}
for feat in INPUT_COLUMNS:
inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)

features = {
key: tf.expand_dims(tensor, -1)
for key, tensor in inputs.iteritems()
}
return tf.contrib.learn.InputFnOps(features, None, inputs)

您可以简单地调用:

regressor.export_savedmodel("path/to/model", serving_input_fn)

或者,如果您使用 learn_runner/Experiment ,您需要传递 ExportStrategy就像下面的 Experiment 构造函数一样:

export_strategies=[saved_model_export_utils.make_export_strategy(
serving_input_fn,
exports_to_keep=1,
default_output_alternative_key=None,
)]

训练后

与上面的步骤几乎完全相同,但只需在一个单独的 Python 脚本中,您可以在训练结束后运行(在您的情况下,这是有益的,因为您不必重新训练)。基本思想是使用训练中使用的相同 model_dir 构建 Estimator,然后按上面的方式调用导出,如下所示:

def serving_input_fn():
"""Build the serving inputs."""
inputs = {}
for feat in INPUT_COLUMNS:
inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)

features = {
key: tf.expand_dims(tensor, -1)
for key, tensor in inputs.iteritems()
}
return tf.contrib.learn.InputFnOps(features, None, inputs)

regressor = tf.contrib.learn.DNNRegressor(
feature_columns=feature_columns,
hidden_units=[40, 30, 20],
model_dir="gs://my-bucket1/test2",
optimizer='RMSProp'
)
regressor.export_savedmodel("my_model", serving_input_fn)
<小时/>

编辑 2017 年 9 月 12 日

您的训练代码需要稍作更改。您正在使用 tf.estimator.DNNRegressor,但它是在 TensorFlow 1.3 中引入的; CloudML Engine 仅正式支持 TensorFlow 1.2,因此您需要使用 tf.contrib.learn.DNNRegressor 代替。它们非常相似,但一个显着的区别是您需要使用 fit 方法而不是 train

关于python - FAILED_PRECONDITION : Error: SavedModel directory gs://mybucket1/is expected contain exactly one of [saved_model. pb,saved_model.pbtxt],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com