我有一个默认图表和一个新创建的图表(G1) .
在G1中,我有一个名为“a”的变量 .
我可以使用 tf.import_graph_def
将G1包含在主图上,并显示其"a"变量 .
How do I initialize this variable and successfully print the value of "a" ?
这是实际的代码:
import tensorflow as tf
INT = tf.int32
def graph():
g = tf.Graph()
with g.as_default() as g:
a = tf.get_variable('a', [], INT, tf.constant_initializer(10))
return g
tf.reset_default_graph()
g = graph()
[g_a] = tf.import_graph_def(g.as_graph_def(), return_elements=['a:0'])
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(g_a))
以上操作无效, FailedPreconditionError: Attempting to use uninitialized value import/a
会出错 .
2 回答
出现错误的原因是,在导入图形def时,不会导入或恢复任何变量和值 .
如果执行以下操作,则可以在另一个图形中使用变量:
在会话中声明您的变量,然后运行tf.global_variables_initalizer()
保存您的变量
导入graph_def后
,恢复变量
important :导入图形时def使用name =''使用与其他图形相同的名称空间,否则会出错
一个最小的例子如何:
所有您需要的内容在tensorflow文档中有详细说明:
https://www.tensorflow.org/programmers_guide/saved_model
使用关联代码示例查看此部分:
如果未将任何参数传递给tf.train.Saver(),则保护程序将处理图中的所有变量 . 每个变量都保存在创建变量时传递的名称下 .
有时在检查点文件中明确指定变量的名称很有用 . 例如,您可能已经使用名为“weights”的变量训练了一个模型,该变量的值要恢复为名为“params”的变量 .
有时仅保存或恢复模型使用的变量子集也是有用的 . 例如,您可能已经训练了一个具有五层的神经网络,现在您想要训练一个具有六层的新模型,该模型重用五个训练层的现有权重 . 您可以使用保护程序恢复前五个图层的权重 .
您可以通过传递给tf.train.Saver()构造函数来轻松指定要保存或加载的名称和变量:
变量列表(将以自己的名称存储) .
一个Python字典,其中键是要使用的名称,值是要管理的变量