decayed_learning_rate

博客展示了使用TensorFlow进行训练的代码示例。设置了不同的训练步数和学习率,通过梯度下降优化器最小化目标函数。还介绍了指数衰减学习率的计算方式,包括衰减速度、衰减系数等参数的作用,并给出了不同参数下学习率的变化情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import tensorflow as tf
# TRAINING_STEPS = 10
# # LEARNING_RATE = 1
# # x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
# # y = tf.square(x)
# #
# # train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y)
# #
# # with tf.Session() as sess:
# #     sess.run(tf.global_variables_initializer())
# #     for i in range(TRAINING_STEPS):
# #         sess.run(train_op)
# #         x_value = sess.run(x)
# #         print ("After %s iteration(s): x%s is %f."% (i+1, i+1, x_value) )

# TRAINING_STEPS = 1000
# LEARNING_RATE = 0.001
# x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
# y = tf.square(x)
#
# train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y)
#
# with tf.Session() as sess:
#     sess.run(tf.global_variables_initializer())
#     for i in range(TRAINING_STEPS):
#         sess.run(train_op)
#         if i % 100 == 0:
#             x_value = sess.run(x)
#             print ("After %s iteration(s): x%s is %f."% (i+1, i+1, x_value))

TRAINING_STEPS = 100
global_step = tf.Variable(0)

# learning_rate, 初始学习率
# global_step, 当前迭代次数
# decay_steps, 衰减速度(在迭代到该次数时学习率衰减为earning_rate * decay_rate)
# decay_rate, 学习率衰减系数,通常介于0 - 1之间。
# staircase = False, (默认值为False, 当为True时,(global_step / decay_steps)则被转化为整数), 选择不同的衰减方式。
# name = None
# decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)
# 直观解释:假设给定初始学习率learning_rate为0.1,学习率衰减率为0.1,decay_steps为10000。
# 则随着迭代次数从1到10000,当前的学习率decayed_learning_rate慢慢的从0.1降低为0.1*0.1=0.01,
# 当迭代次数到20000,当前的学习率慢慢的从0.01降低为0.1*0.1^2=0.001,以此类推。
# 也就是说每10000次迭代,学习率衰减为前10000次的十分之一,该衰减是连续的,这是在staircase为False的情况下。
# 如果staircase为True,则global_step / decay_steps始终取整数,也就是说衰减是突变的,每decay_steps次变化一次,变化曲线是阶梯状。
LEARNING_RATE = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)

x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y, global_step=global_step)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(TRAINING_STEPS):
        sess.run(train_op)
        #if i % 10 == 0:
        LEARNING_RATE_value = sess.run(LEARNING_RATE)
        x_value = sess.run(x)
        print ("After %s iteration(s): x%s is %f, learning rate is %f."% (i+1, i+1, x_value, LEARNING_RATE_value))
### lr_drop 的含义及其在深度学习或机器学习中的作用 `lr_drop` 并未直接出现在所提供的引用中,但从上下文中可以推测其可能与 **学习率调整策略** 有关。以下是对其定义和功能的详细解释: #### 学习率下降机制 在深度学习和机器学习领域,`lr_drop` 可能指代一种动态调整学习率的方式,通常用于优化器的学习率调度器(Learning Rate Scheduler)。这种技术的核心目的是通过降低学习率来帮助模型更稳定地收敛到全局最优解或局部极小值。 常见的学习率衰减方法包括但不限于以下几种: 1. **固定间隔衰减**: 按照预设的时间步长逐步减少学习率。 2. **基于验证集表现的自适应衰减**: 当验证损失不再改善时触发学习率下降。 3. **余弦退火**: 使用类似于余弦曲线的形式逐渐降低学习率[^3]。 如果 `lr_drop` 是某种特定实现的一部分,则它很可能表示某个阶段内的学习率下降比例或者条件触发后的操作逻辑。 #### 动态调整学习率的重要性 动态调整学习率对于训练过程至关重要,原因如下: - 初期较大的学习率有助于快速探索参数空间; - 随着训练深入,较小的学习率能够使权重更新更加精细,从而提高精度并防止震荡发散。 例如,在某些框架下可以通过配置类似下面这样的代码片段实现学习率按指数方式递减的功能: ```python def adjust_learning_rate(optimizer, epoch, initial_lr=0.1, drop_factor=0.5, epochs_drop=10): """Sets the learning rate to the initial LR decayed by factor every N epochs""" lr = initial_lr * (drop_factor ** (epoch // epochs_drop)) for param_group in optimizer.param_groups: param_group['lr'] = lr ``` 此函数每隔指定数量的轮次 (`epochs_drop`) 将当前学习率乘以给定因子(`drop_factor`) 来完成一次缩减动作,这正是所谓的 “learning rate dropping”。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值