考虑到以下代码:
import tensorflow as tf
with tf.Session() as sess:
var = tf.Variable(42, name='var')
sess.run(tf.global_variables_initializer())
tf.train.export_meta_graph('file.meta')
with tf.Session() as sess:
saver = tf.train.import_meta_graph('file.meta')
print sess.run(var)在saver = tf.train.import_meta_graph('file.meta')表示ValueError: At least two variables have the same name: var的一行中,我发现了一个错误。
我怎么才能避开这一切?在导入元计时器时,是否存在覆盖计算图的问题?
编辑:
我得出了以下代码:
import tensorflow as tf
file_name = "./file"
with tf.Session() as sess:
var = tf.Variable(42, name='my_var')
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()
saver.save(sess,file_name)
saver.export_meta_graph(file_name + '.meta')
with tf.Session() as sess:
saver = tf.train.import_meta_graph(file_name + '.meta')
saver.restore(sess, file_name)
print(sess.run(var))
# new code that fails:
saver = tf.train.Saver()
saver.save(sess,file_name)
saver.export_meta_graph(file_name + '.meta')这将为var打印正确的值,但是当我第二次保存该图时,我会得到相同的原始错误:ValueError: At least two variables have the same name: var
发布于 2016-12-30 21:32:52
在这种情况下,您将在默认图形中加载变量,在默认图形中已经定义了变量。因此,您需要在导入TensorFlow图之前重置它。
使用tf.reset_default_graph()执行此操作。在你进口之前。查看导出和导入MetaGraph下的“默认图形中的导入”部分。
当然,您必须使用var重新定义变量tf.get_variable()。试试这段代码,
import tensorflow as tf
with tf.Session() as sess:
var = tf.Variable(42, name='var')
sess.run(tf.global_variables_initializer())
tf.train.export_meta_graph('file.meta')
tf.reset_default_graph()
with tf.Session() as sess:
saver = tf.train.import_meta_graph('file.meta')
var = tf.global_variables()[0]
sess.run(tf.initialize_all_variables())
print sess.run(var)您的中间代码不能工作的原因是tf.get_variable()正在创建一个正在随机初始化的新变量。确保您首先做tf.get_variable_scope().reuse_variables()。看看tf.get_variable()。
不幸的是,使用tf.Variable()创建的变量不能直接与tf.get_variable()一起重用。看看这个评论和这个评论,确切地知道原因。因此,如果希望在将来重用变量,则需要使用tf.get_variable()来创建该变量。
https://stackoverflow.com/questions/41400391
复制相似问题