如何在 MxNet 中使用自适应学习率
How to use adapted learning rate in MxNet
学习率是我网络效果的关键。
当我定义 lr = 0.05 时,train/validation-accuracy 振荡严重,但是 lr = 0.025 我直到 Epoch[30] 才能得到任何效果。
所以我记得caffe中自适应学习率,一开始我选择了一个基数lr = 0.1,随着训练的进行,lr衰减到0.05,然后是0.025甚至更小。
MxNet有没有这个策略,我该如何使用?
您有两种选择:
一个是在每个batch/epoch:
的末尾使用回调函数
sgd_opt = opt.SGD(learning_rate=0.005, momentum=0.9, wd=0.0001, rescale_grad=(1.0/batch_size))
model = mx.model.FeedForward(ctx=gpus, symbol=softmax, num_epoch=num_epoch,
optimizer=sgd_opt, initializer=mx.init.Uniform(0.07))
def lr_callback(param):
if param.nbatch % 10 == 0:
sgd_opt.lr /= 10 # decrease learning rate by a factor of 10 every 10 batches
print 'nbatch:%d, learning rate:%f' % (param.nbatch, sgd_opt.lr)
model.fit(X=train_dataiter, eval_data=test_dataiter, batch_end_callback=lr_callback)
另一种是使用 optimizers 之一,例如 AdaGrad 或 ADAM
model = mx.model.FeedForward(
ctx = [mx.gpu(0)],
num_epoch = 60,
symbol = network,
optimizer = 'adam',
initializer = mx.init.Xavier(factor_type="in", magnitude=2.34))
model.fit(X= data_train)
学习率是我网络效果的关键。 当我定义 lr = 0.05 时,train/validation-accuracy 振荡严重,但是 lr = 0.025 我直到 Epoch[30] 才能得到任何效果。 所以我记得caffe中自适应学习率,一开始我选择了一个基数lr = 0.1,随着训练的进行,lr衰减到0.05,然后是0.025甚至更小。 MxNet有没有这个策略,我该如何使用?
您有两种选择:
一个是在每个batch/epoch:
的末尾使用回调函数sgd_opt = opt.SGD(learning_rate=0.005, momentum=0.9, wd=0.0001, rescale_grad=(1.0/batch_size))
model = mx.model.FeedForward(ctx=gpus, symbol=softmax, num_epoch=num_epoch,
optimizer=sgd_opt, initializer=mx.init.Uniform(0.07))
def lr_callback(param):
if param.nbatch % 10 == 0:
sgd_opt.lr /= 10 # decrease learning rate by a factor of 10 every 10 batches
print 'nbatch:%d, learning rate:%f' % (param.nbatch, sgd_opt.lr)
model.fit(X=train_dataiter, eval_data=test_dataiter, batch_end_callback=lr_callback)
另一种是使用 optimizers 之一,例如 AdaGrad 或 ADAM
model = mx.model.FeedForward(
ctx = [mx.gpu(0)],
num_epoch = 60,
symbol = network,
optimizer = 'adam',
initializer = mx.init.Xavier(factor_type="in", magnitude=2.34))
model.fit(X= data_train)