在TensorFlow中可以训练tf.variable是什么意思

时间:2018-01-26 11:00:44

标签: python tensorflow

当我阅读global_step的文档时,我遇到了这个问题。 这里明确声明global_step不可训练。

  

global_step_tensor = tf.Variable(10,trainable = False,name ='global_step')

     

sess = tf.Session()

     

print('global_step:%s'%tf.train.global_step(sess,global_step_tensor))

根据我的理解,可训练意味着可以在sess.run()期间更改值。我试图宣布它既可训练又不训练,并得到相同的结果。所以我不明白为什么我们需要声明它不可训练。

我阅读了trainable的文档,但没有完全理解。

所以我的问题是:

  1. 在sess.run()期间是否可以更改不可训练的变量值,反之亦然?
  2. 使变量无法训练的重点是什么?

1 个答案:

答案 0 :(得分:11)

  

根据我的理解,trainable意味着可以在sess.run()

期间更改值

这不是 trainable 变量的定义。 任何变量都可以在sess.run()期间修改(这就是为什么它们是变量而不是常量)。

可训练变量和非训练变量之间的区别用于让Optimizer知道它们可以作用于哪些变量。 定义tf.Variable()时,设置trainable=True(默认值)会自动将变量添加到GraphKeys.TRAINABLE_VARIABLES集合中。 在培训期间,优化程序通过tf.trainable_variables()获取该集合的内容,并将培训应用于所有这些内容。

不可训练变量的典型示例是global_step,因为它的值确实随时间变化(通常在每次训练迭代时为+1),但您不希望对其应用优化算法