TensorFlow 1.0.1 SavedModelBuilder

时间:2017-05-04 11:06:25

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

我目前正在探索在Google ML Engine上部署模型。起初,我使用TensorFlow 1.1.0开发了一个模型,因为它存在最新版本(当问到这个问题时)。但是,事实证明,GCP上TensorFlow的最高支持版本是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.Variable。但是,存在多个tf.contrib.lookup.MutableDenseHashTable并且它们在TensorFlow 1.1.0中正确导出,但在TensorFlow 1.0.1中没有导出(因为1.0.1中根本没有导出变量)。

1 个答案:

答案 0 :(得分:0)

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