global 您所在的位置:网站首页 tftrainexponential_decay global

global

2024-06-28 17:51| 来源: 网络整理| 查看: 265

tf.train.get_global_step() 方法返回的是的 global_step作为name的tensor, 如 。 tensor参数与global_step = tf.Variable(0, name=“global_step”, trainable=False) 完全相同。

tensorflow中不少方法是存在global_step 参数的,比如optimizer.minimize(loss, global_step= tf.train.get_global_step() ) 这个参数可以传入tf.train.get_global_step()方法,也可以传入普通的Variable,即name任意。每次打开tf.Session()并运行该方法时,系统会自动为传入的global_step参数+1。

在这里你可能会问,既然能传入普通Variable,为什么还要有global_step 作为name的tensor? 个人认为这是为了使代码清晰吧,毕竟global_step是比较常用的变量,如果和普通Variable混在一起就降低了代码的可读性。

以下给出代码示例:

x = tf.placeholder(tf.float32, shape=[None], name='x') y = tf.placeholder(tf.float32, shape=[None], name='y') w = tf.Variable(tf.truncated_normal(shape=[2], mean=0, stddev=0.1))   # gl_v = tf.Variable(0, trainable=False) gl = tf.train.get_global_step() learning_rate = tf.train.exponential_decay(0.1, gl, 10, 2, staircase=False) loss = tf.square(w*x+y)   train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=gl)

with tf.Session() as sess:     sess.run(tf.initialize_all_variables())     for i in range(10):         print ('gl before run:',sess.run(gl))         sess.run(train_step, feed_dict={x:np.array([10,10]),         y:np.array([10,10])})         print (sess.run(learning_rate))         print ('gl after run:',sess.run(gl))         print('\n')

  exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)

使用方式为

tf.train.exponential_decay( )

在 Tensorflow 中,exponential_decay()是应用于学习率的指数衰减函数(实现指数衰减学习率)。

在训练模型时,通常建议随着训练的进行逐步降低学习率。该函数需要`global_step`值来计算衰减的学习速率。

该函数返回衰减后的学习率。该函数的计算方程式如下

 

参数:

learning_rate - 初始学习率 global_step - 用于衰减计算的全局步骤。 一定不为负数。 喂入一次 BACTH_SIZE 计为一次 global_step decay_steps - 衰减速度,一定不能为负数,每间隔decay_steps次更新一次learning_rate值decay_rate - 衰减系数,衰减速率,其具体意义参看函数计算方程(对应α^t中的α)。staircase - 若 ‘ True ’ ,则学习率衰减呈 ‘ 离散间隔 ’ (discrete intervals),具体地讲,`global_step / decay_steps`是整数除法,衰减学习率( the decayed learning rate )遵循阶梯函数;若为 ’ False ‘ ,则更新学习率的值是一个连续的过程,每步都会更新学习率。

返回值:

与初始学习率 ‘ learning_rate ’ 相同的标量 ’ Tensor ‘ 。

 优点:

训练伊始可以使用较大学习率,以快速得到比较优的解。后期通过逐步衰减后的学习率进行迭代训练,以使模型在训练后期更加稳定。 

示例:

 

import tensorflow as tf import matplotlib.pyplot as plt learning_rate = 0.1 decay_rate = 0.96 global_steps = 1000 decay_steps = 100 global_step = tf.Variable(0, trainable = Fasle) c = tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=True) d = tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False) T_C = [] F_D = [] with tf.Session() as sess: for i in range(global_steps): T_c = sess.run(c, feed_dict={global_step: i}) T_C.append(T_c) F_d = sess.run(d, feed_dict={global_step: i}) F_D.append(F_d) plt.figure(1) plt.plot(range(global_steps), F_D, 'r-') plt.plot(range(global_steps), T_C, 'b-') plt.show()

 

 

运行

备注:

(1)台阶形状的蓝色线是 staircase = True

线条形状的红色线是 staircase = Fasle

(2)初始学习率 learning_rate 为0.1,总训练次数 global_setps 为 1000 次;staircase=True时,每隔 decay_steps = 100 次更新一次 学习率 learning_rate,而staircase=True时,每一步均会更新一次学习率 learning_rate ,

(3)训练过程中,decay_rate的数值保持步不变。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有