2017-05-04 47 views
0

我目前正在进行关于在Google ML引擎上部署模型的探索。起初,我使用TensorFlow 1.1.0开发了一个模型,因为它存在最新版本(在问这个问题时)。但是,事实证明GCP上最高支持的TensorFlow版本是1.0.1。TensorFlow 1.0.1 SavedModelBuilder

的问题是,以前当我使用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 s,它们在TensorFlow 1.1.0中正确导出,但在TensorFlow 1.0.1中未导出(因为在1.0.1中根本没有导出任何变量)。

+0

为了澄清,你说的'tf.contrib.lookup.MutableDenseHashTable'在1.1.0导出为一个变量,但不1.0.1? – jwayne

+0

@jwayne我不确定它是否作为变量导出。然而,在1.1.0中使用'SavedModelBuilder'保存并加载模型(包括'MutableDenseHashTable')可以正常工作,但不能在1.0.1中使用 – sokokaleb

回答

0

它看起来像在没有变量的TensorFlow中保存和加载模型的能力在commit中介绍过,它仅在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 
+0

事实上,由于SavedModel将用于服务(作为服务模型)我需要保存的是变量及其值,以便图形及其变量+内容可以在恢复后直接加载。 – sokokaleb