2

我有一个包含多个变量的多个作用域的网络。我需要一种方法来设置特定变量或名称范围的训练能力,以便它们不被更新并且不包含在梯度计算中,然后在某些条件后将其设置为可训练。它甚至有可能吗?如果是,如何?动态设置张量流量的训练能力变量

with tf.name_scope('layer1'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 
with tf.name_scope('layer2'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 
with tf.name_scope('layer3'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 

我想改变的变量列车能力第一范围,因为它们正在从一个预先训练文件恢复,他们已经得知。所以,我想训练其他层中的变量,直到他们被学习,然后将第一个范围中的变量的训练能力设置回True,并将它们一起训练。你可以使用

+0

纯文本问题很少被接受。请显示您在代码中所做的事情。 –

+0

你可以传递一个'variable_list'给minimizer来决定更新哪个变量。 – soloice

回答

2

一件事是var_list参数优化每一个具有:https://www.tensorflow.org/api_docs/python/tf/train/Optimizer

文档说:

var_list:变量对象的可选名单进行更新,以尽量减少损失。默认为GraphKeys.TRAINABLE_VARIABLES下的图表中收集的变量列表。

你的情况,你可以说:

optimizer = GradientDescentOptimizer(0.01) 
optimizer.minimize(loss,[w1,w2]) 

让我们知道,如果这有助于!

+1

是否可以从var_list中删除或添加任何变量,该变量默认为GraphKeys.TRAINABLE_VARIABLES下的图中收集的变量列表? –

+1

你可以做的是创建多个优化器,并在一段时间后选择另一个... – rmeertens