【问题标题】:Dynamically setting the train-ability of tensorflow Variables动态设置张量流变量的训练能力
【发布时间】:2017-03-13 15:45:04
【问题描述】:

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

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 并一起训练它们。

【问题讨论】:

  • 很少接受纯文本问题。请在代码中显示您所做的工作。
  • 您可以将variable_list 传递给最小化器来决定要更新哪些变量。

标签: python machine-learning tensorflow neural-network deep-learning


【解决方案1】:

您可以使用的一件事是每个优化器都有的 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])

如果这有帮助,请告诉我们!

【讨论】:

  • 是否可以从 var_list 中删除或添加任何变量,该变量默认为在 GraphKeys.TRAINABLE_VARIABLES 键下的图表中收集的变量列表中?
  • 你可以做的是创建多个优化器,然后再选择一个...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2020-02-29
  • 2021-06-28
  • 2017-09-22
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多