当我阅读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的文档,但没有完全理解。
所以我的问题是:
答案 0 :(得分:11)
根据我的理解,trainable意味着可以在sess.run()
期间更改值
这不是 trainable 变量的定义。 任何变量都可以在sess.run()
期间修改(这就是为什么它们是变量而不是常量)。
可训练变量和非训练变量之间的区别用于让Optimizer
知道它们可以作用于哪些变量。
定义tf.Variable()
时,设置trainable=True
(默认值)会自动将变量添加到GraphKeys.TRAINABLE_VARIABLES
集合中。
在培训期间,优化程序通过tf.trainable_variables()
获取该集合的内容,并将培训应用于所有这些内容。
不可训练变量的典型示例是global_step
,因为它的值确实随时间变化(通常在每次训练迭代时为+1),但您不希望对其应用优化算法