【问题标题】:TensorFlow 1.0.1 SavedModelBuilderTensorFlow 1.0.1 SavedModelBuilder
【发布时间】:2017-10-02 12:45:09
【问题描述】:

我目前正在探索如何在 Google ML Engine 上部署模型。起初,我使用 TensorFlow 1.1.0 开发了一个模型,因为它是最新版本(在提出这个问题时)。然而,事实证明,TensorFlow 在 GCP 上支持的最高版本是 1.0.1。

问题是,以前当我使用 TensorFlow 1.1.0 时,SavedModelBuilder 会正确地将模型保存为SavedModel 及其变量在variables/ 目录下。但是,当我切换到 TensorFlow 1.0.1 时,它并没有类似的工作:创建了 SavedModel 文件,但在 variables/ 下没有创建任何文件,因此无法仅使用 SavedModel 文件构建模型( variables/ 下的文件丢失)。

这是一个已知的错误吗?或者我应该做些什么来让 TensorFlow 1.0.1 上的 SavedModelBuilder 像 TensorFlow 1.1.0 一样工作?

谢谢。

编辑,更多细节:

实际上,我的模型中不存在明确的tf.Variables。但是,存在多个tf.contrib.lookup.MutableDenseHashTables,它们在 TensorFlow 1.1.0 中正确导出,但在 TensorFlow 1.0.1 中没有(因为在 1.0.1 中根本没有导出任何变量)。

【问题讨论】:

  • 澄清一下,您是说tf.contrib.lookup.MutableDenseHashTable 在 1.1.0 中作为变量导出,而不是 1.0.1?
  • @jwayne 我不确定它是否作为变量导出。但是,保存和加载模型(包括在 1.1.0 中使用 SavedModelBuilderMutableDenseHashTable 可以正常工作,但在 1.0.1 中则不行。

标签: tensorflow tensorflow-serving google-cloud-ml-engine


【解决方案1】:

这个commit 中似乎引入了在 TensorFlow 中不使用变量保存和加载模型的功能,该功能仅在 1.1.0 中可用。

作为一种解决方法,您可以在模型中创建一个虚拟(未使用)变量。

编辑: 根据 OP 更新,听起来好像有一个 MutableDenseHashTable 没有被保存出来。

您可以在 CloudML Engine 上运行 TensorFlow 1.1,但需要手动将其添加为附加包。

首先,下载TensorFlow 1.1 wheel。然后将其指定为训练作业的附加包,例如,

gcloud ml-engine jobs submit training my_job \
    --module-name trainer.task \
    --staging-bucket gs://my-bucket \
    --package-path /my/code/path/trainer \
    --packages tensorflow-1.1.0-cp27-cp27mu-manylinux1_x86_64.whl

【讨论】:

  • 实际上,由于 SavedModel 将用于服务(作为服务模型),我需要保存的是变量及其值,以便图形及其变量+内容都可以恢复后直接加载。
猜你喜欢
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2012-08-14
  • 2012-07-18
相关资源
最近更新 更多