当我阅读global_step的文档时,这个问题就出现了。在这里,它明确声明global_step不可训练。
global_step_tensor = tf。变量(10, 可训练=假, 名称='global_step'(
SESS = TF。会话((
print('global_step: %s' % tf.train.global_step(sess, global_step_tensor((
根据我的理解,可训练意味着值可以在 sess.run(( 期间更改。我试图宣布它是可训练的和不可训练的,并得到了相同的结果。所以我不明白为什么我们需要声明它不可训练。
我阅读了可训练的文档,但不太明白。
所以我的问题是:
- 不可训练的变量值可以在 sess.run(( 期间更改,反之亦然?
- 使变量不可训练的意义是什么?
根据我的理解,可训练意味着值可以在 sess.run(( 期间更改
这不是可训练变量的定义。任何变量都可以在sess.run()
期间修改(这就是为什么它们是变量而不是常量(。
和不可训练变量之间的区别用于让Optimizer
知道他们可以对哪些变量进行操作。定义 tf.Variable()
时,设置 trainable=True
(默认值(会自动将变量添加到GraphKeys.TRAINABLE_VARIABLES
集合中。在训练期间,优化器通过tf.trainable_variables()
获取该集合的内容,并将训练应用于所有集合。
不可训练变量的典型示例是 global_step
,因为它的值确实会随时间变化(通常在每次训练迭代中为 +1(,但您不想对其应用优化算法。