TensorFlow中global_step的简单分析

global_step在滑动平均、优化器、指数衰减学习率等方面都有用到,这个变量的实际意义非常好理解:代表全局步数,比如在多少步该进行什么操作,现在神经网络训练到多少轮等等,类似于一个钟表。

import tensorflow as tf
import numpy as np
 
x = tf.placeholder(tf.float32, shape=[None, 1], name='x')
y = tf.placeholder(tf.float32, shape=[None, 1], name='y')
w = tf.Variable(tf.constant(0.0))
 
global_steps = tf.Variable(0, trainable=False)
 
learning_rate = tf.train.exponential_decay(0.1, global_steps, 10, 2, staircase=False)
loss = tf.pow(w*x-y, 2)
 
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_steps)
 
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(10):
        sess.run(train_step, feed_dict={x:np.linspace(1,2,10).reshape([10,1]),
            y:np.linspace(1,2,10).reshape([10,1])})
        print(sess.run(learning_rate))
        print(sess.run(global_steps))
"""
0.107177
1
0.11487
2
0.123114
3
0.131951
4
0.141421
5
0.151572
6
0.16245
7
0.17411
8
0.186607
9
0.2
10
"""

从上面可以看到,global_steps的初始值是0,而且整个代码中没有给global_steps加一的操作,但是打印出来的值却加一了。

经过多次修改代码验证之后得出,如果把

train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_steps)

后面部分的global_step=global_steps去掉,global_steps的自动加一就会失效

因为指数衰减的学习率是伴随global_steps的变化而衰减的,所以当global_steps不改变时,学习率也变成一个定值。

综上所述:损失函数优化器的minimize()中global_step=global_steps能够提供global_steps自动加一的操作。

这里有个额外的疑虑说明:global_steps是等号右边,在编程语言里面通常当作定值赋值给等号左边的global_step(即global_steps是不会被函数改变的)。然而,在这个优化器里面能够使得右边的变量自动加一。这确实是编程语言里面少见的,也是需要特别注意的。

转载自:https://blog.csdn.net/leviopku/article/details/78508951

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值