在tensorflow中,如何将某些variable_scope变量恢复到另一个某个variable_scope?

时间:2017-10-06 14:52:06

标签: tensorflow

现在我已经训练了一个模型A,我需要两个模型A实例,因为其中一个实例是固定的,无法用于输出,另一个可用于下一个网络。 我设计了两个variable_scope A_trainA_untrain ,我在A variable_scope预训了A_untrain模型,并在这个范围,代码如:

saver_untrain = tf.train.Saver(tf.get_collection(
                                   tf.GraphKeys.GLOBAL_VARIABLES,
                                   'A_untrain'))
saver_path = '~/models/model.ckpt'
# here pre-train model A
saver_untrain.save(sess, saver_path)

现在我需要将相同的模型A参数恢复到范围A_train中的相同模型中,但我无法遵循之前的代码,因为ckpt文件会恢复A_untrain/input_w1 instread之类的参数A_train/input_w1。我想知道我的问题是否有解决方案,或者是一个更好的解决方案来制作两个实例,其中一个是可训练的,另一个是无法解决的。非常感谢。

EDIT_1 :我知道我可以意识到我需要使用以下代码:

saver_train = tf.train.Saver({'A_untrain/input_w1': A_train.input_w1})

但是当我的变量数量很大时,这将是不切实际的,所以我需要使用variable_scope来恢复而不是特定变量的名称。

1 个答案:

答案 0 :(得分:0)

我终于通过numpy找到了解决方案。我们可以以'* .npy'的格式保存训练好的参数。当我们需要加载参数时,我们可以np.load npy文件,然后在Session中调用tf.assign()来分配值。无论你的变量是什么,它都能正常工作。