我有一个具有多个范围的网络,其中包含多个变量。我需要一种方法来设置特定变量或名称范围的训练能力,以便它们不会更新并且不包含在梯度计算中,然后在某些条件后将它们设置为可训练。有可能吗?如果是,如何?
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 并将它们一起训练。
最佳答案
您可以使用的一件事是每个优化器都有的 var_list 参数:https://www.tensorflow.org/api_docs/python/tf/train/Optimizer
文档说:
var_list: Optional list of Variable objects to update to minimize loss. Defaults to the list of variables collected in the graph under the key GraphKeys.TRAINABLE_VARIABLES.
根据你的情况,你可以说:
optimizer = GradientDescentOptimizer(0.01)
optimizer.minimize(loss,[w1,w2])
请告诉我们这是否有帮助!
关于python - 动态设置tensorflow变量的可训练性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42757805/