无法动态调整训练过程中的学习率
收藏
0
收藏
全部评论(6)
lr_tensor = fluid.global_scope().find_var(lr_name).get_tensor() 这种是静态图获取lr的办法,
你可以通过 lr_layer.step() 来获取到lr的值
0
lr_tensor = fluid.global_scope().find_var(lr_name).get_tensor() 这种是静态图获取lr的办法,
你可以通过 lr_layer.step() 来获取到lr的值
对,我是想在静态图中训练过程中去设置 lr, 而不是训练开始就预设好整个训练流程的 lr
0
@xuzhm
您的代码里为什么要写 fluid.layers.piecewise_decay()
?这个LR Decay会覆盖你设置的学习率。您尝试使用以下代码试试:
import paddle.fluid as fluid
import numpy as np
lr_layer = fluid.data(shape=[1], dtype='float32', name='lr_decay')
lr_layer.persistable = True
optimizer = fluid.optimizer.Momentum(
learning_rate=lr_layer,
momentum=0.9,
regularization=fluid.regularizer.L2Decay(1e-4))
lr_name = lr_layer.name
place = fluid.CUDAPlace(0)
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
for idx in range(10):
lr_val = np.array([(idx + 1)* 100]).astype('float32')
if idx == 0:
lr_val, = exe.run(fluid.default_main_program(), feed={lr_name: lr_val}, fetch_list=[lr_name])
else:
lr_val, = exe.run(fluid.default_main_program(), fetch_list=[lr_name])
print(lr_val)
lr_tensor = fluid.global_scope().find_var(lr_name).get_tensor()
lr_tensor.set(np.array([(idx + 2)* 100]).astype('float32'), place)
0
请登录后评论
试图在训练过程中动态的调整学习率, 但是失败了,实验方式如下:
lr_layer = fluid.layers.piecewise_decay(boundaries=bd, values=lr)
optimizer = fluid.optimizer.Momentum(
learning_rate=lr_layer,
momentum=0.9,
regularization=fluid.regularizer.L2Decay(1e-4))
#通过find_var(lr_name).get_tensor 获取到学习率变量并重置
lr_tensor = fluid.global_scope().find_var(lr_name).get_tensor()
print 'before', np.array(lr_tensor)
cur_lr = 3000
cur_lr_np = np.array([cur_lr])
lr_tensor.set(cur_lr_np, place)
print 'set lr', lr_name, cur_lr_np
#这里显示设置成功了
print 'after', np.array(lr_tensor)
#但是实际通过optimizer._global_learning_rate() 得到的还是之前的值
print optimizer._global_learning_rate()