学习率是我网络效果的关键 . 当我定义lr = 0.05时,列车/验证精度严重振荡,但是lr = 0.025我直到Epoch [30]才能得到任何效果 . 所以我记得caffe中适应的学习率,首先我选择基数lr = 0.1,随着训练的进行,lr衰减到0.05,然后是0.025和更小 . MxNet是否有此策略,我该如何使用它?
你有几个选择:
一种是在每个批次/纪元的末尾使用 callback 函数:
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)
1 回答
你有几个选择:
一种是在每个批次/纪元的末尾使用 callback 函数:
另一种是使用optimizers之一,如AdaGrad或ADAM