现在我已经训练了一个模型A
,我需要两个模型A
实例,因为其中一个实例是固定的,无法用于输出,另一个可用于下一个网络。 我设计了两个variable_scope A_train
和A_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
来恢复而不是特定变量的名称。
答案 0 :(得分:0)
我终于通过numpy找到了解决方案。我们可以以'* .npy'的格式保存训练好的参数。当我们需要加载参数时,我们可以np.load
npy文件,然后在Session中调用tf.assign()
来分配值。无论你的变量是什么,它都能正常工作。