Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在预定义的图形对象上使用tf.train.Saver对象_Python_Tensorflow_Graph - Fatal编程技术网

Python 在预定义的图形对象上使用tf.train.Saver对象

Python 在预定义的图形对象上使用tf.train.Saver对象,python,tensorflow,graph,Python,Tensorflow,Graph,TL;DR:为什么我们不能使用类似于tf.saver.Save(graph=graph\u obj)的东西来定义一个saver对象 标题主要说明了这一切。。。好的,为了将一个saver对象链接到您的图形,您需要这样定义它 将tf.Graph()作为默认值()作为g_def: x\u input\u fun=tf.placeholder(dtype=tf.float32,name='input') y_output_fun=tf.placeholder(dtype=tf.float32,name

TL;DR:为什么我们不能使用类似于
tf.saver.Save(graph=graph\u obj)
的东西来定义一个saver对象


标题主要说明了这一切。。。好的,为了将一个saver对象链接到您的图形,您需要这样定义它

将tf.Graph()作为默认值()作为g_def:
x\u input\u fun=tf.placeholder(dtype=tf.float32,name='input')
y_output_fun=tf.placeholder(dtype=tf.float32,name='output')
w_weights_fun=tf.get_变量('weight_set',dtype=tf.float32,shape=(5,5))
output=tf.matmul(x_input_fun,w_weights_fun,name='pred')
损耗=tf.subtract(输出,y\u输出,name='loss')
self.opti=tf.train.AdamOptimizer(丢失,name='opti')
g_def.将_添加到_集合(tf.GraphKeys.TRAIN_OP,self.opti)
#现在,当我们执行saver.save(…)时,saver链接到此图
saver=tf.train.saver()
如果要将其链接到默认图形,只需说出
tf.train.Saver()
(当然,如果其中有可训练/可保存的变量)

但是为什么我们不能像这样做:
tf.train.Saver(graph=g_def)

这对我来说会更自然。当我们从一个检查点恢复一个模型时,类似的情况(对我来说)也适用。。。即使我们执行下面的代码

将tf.Session(graph=tf.graph())作为sess的
:
saver=tf.train.import\u meta\u graph('some\u meta\u file.meta')
saver.restore(sess'./一些元文件')
然后,
tf.default\u graph()
仍然从导入的元文件中获得了节点。我能想到它如何运作的原因。。。但现在为什么

编辑:

我在检查导入图的节点时犯了如下错误。我运行了这个代码

将tf.Session(graph=tf.graph())作为sess的
:
saver=tf.train.import\u meta\u graph('some\u meta\u file.meta')
saver.restore(sess'./一些元文件')
打印(sess.graph==tf.get\u default\u graph())
因为我想确保默认图不包含我刚刚导入到会话图中的节点。但是,这个tf.get_default_graph()当然是。。相对的。。因此,在此会话中,默认图形实际上是导入的图形


因此,这也使得saver对象的工作更具逻辑性。由于此对象将始终保存/获取tf.get_default_graph()的内容。

为了保存或还原任何内容,
tf.train.Saver
需要一个会话,并且会话绑定到特定的图形实例(如您的示例中)。这意味着,如果没有会话,保存程序实际上毫无意义。我想这是不在saver中使用显式图形绑定的主要动机

我想您可能会感兴趣的是以下内容中的
defer\u build
属性:

defer\u build
:如果
True
,则推迟将保存和还原操作添加到
build()
调用。在这种情况下,应在完成图形或使用保护程序之前调用
build()


通过这种方式,您可以创建一个不绑定到任何图形的
tf.train.Saver
,并在以后为特定的
tf.graph
实例调用
build()。该块使用提供的
图形