Tensorflow:节能resoring会议 - 多个变量

问题描述:

考虑下面的代码:Tensorflow:节能resoring会议 - 多个变量

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) 

我在说ValueError: At least two variables have the same name: varsaver = tf.train.import_meta_graph('file.meta')得到一个错误。

我怎样才能解决这个问题?无论如何在导入metagraph时覆盖计算图?

编辑:

我下面的代码已经到了:

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

+0

嘿@汤姆,你对我的回答满意吗? – martianwars

+0

嘿@martianwars,看我的编辑 – Tom

+0

嘿@martianwars编辑包括'reset_default_graph' – Tom

在这种情况下,您正在将变量加载到已定义变量的默认图形中。因此, 您需要在导入之前重置TensorFlow图。

使用tf.reset_default_graph()执行此操作。在导入之前。查看Exporting and Importing a MetaGraph下的“在默认图表中导入”部分。

当然,您将不得不使用tf.get_variable()重新定义变量var。试试这个代码,

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()。 看看Understanding tf.get_variable()

不幸的是,使用tf.Variable()创建的变量不能直接与tf.get_variable()重复使用。看看这个comment和这个comment确切地知道为什么。因此,如果您希望将来重用该变量,则需要使用tf.get_variable()创建变量。