tensorflow中的global_step参数

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

global_step经常在滑动平均,学习速率变化的时候需要用到,这个参数在tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_steps)里面有,系统会自动更新这个参数的值,从1开始。

根据代码可以发现global_step的初始化值是0:

global_step=tf.Variable(0, trainable=False)  
 ```

这个初始化代码十分简单,但也是问题所在。如果global_step直接赋值为0了,还怎么表示全局的步数?global_step到底是怎么完成自动加1的?
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))  

如果把train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_steps)后面部分的global_step=global_steps去掉,global_step的自动加一就会失效。
输出如下:
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0
0.1
0

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

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

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

参考博客:
https://blog.csdn.net/leviopku/article/details/78508951

https://blog.csdn.net/uestc_c2_403/article/details/72403833

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值