【问题标题】:In tensorflow, how to restore the certain variable_scope Variables into another certain variable_scope?在tensorflow中,如何将某个variable_scope变量恢复到另一个某个variable_scope?
【发布时间】:2018-03-18 10:10:19
【问题描述】:

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

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 之类的参数A_train/input_w1 的插入。我想知道我的问题是否有解决方案,或者有更好的解决方案来制作两个实例,一个是可训练的,另一个是不可训练的。非常感谢。

EDIT_1:我知道我可以使用如下代码实现我的需要:

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

但是当我的变量数量很大的时候就不实用了,所以我需要使用variable_scope来恢复而不是具体的变量名。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    我终于通过 numpy 找到了解决方案。我们可以将训练后的参数保存为 '*.npy' 的格式。当我们需要加载参数时,可以np.loadnpy文件,然后在Session中调用tf.assign()赋值。不管你的variable_scope是什么都可以。

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2018-08-07
      • 2018-01-10
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多