2017-10-06 143 views
3

现在我已经训练了模型A,我需要两个模型A实例,因为他们中的一个刚是固定的,untrainable输出,另一个是可训练的下一个网络。 我设计了两个variable_scope A_trainA_untrain,我预先训练中variable_scopeA_untrainA模型,也是恢复模型在此范围内,这样的代码:在tensorflow,如何恢复某些variable_scope变量到另一个一定variable_scope?

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参数代入因为CKPT文件恢复PARAMS像A_untrain/input_w1 instread的A_train/input_w1范围A_train相同的模型,但我不能按照以前的代码。我想知道是否有解决我的问题或更好的解决方案,使两个实例哪一个是可训练的,另一个是不可排除的。非常感谢。

EDIT_1:我知道我可以实现像我需要使用代码:

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

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

回答

0

我终于找到了通过numpy的解决方案。我们可以将训练过的参数保存为'* .npy'格式。当我们需要加载参数,我们可以np.load的NPY文件,然后调用tf.assign()在会话分配的value.It工作不管你variable_scope是什么。

相关问题