2017-02-23 117 views
2

Скорость обучения - это ключ к влиянию моей сети. Когда я определяю lr = 0,05, точность поезда/проверки достоверно колеблется, однако lr = 0,025 Я не могу получить никакого эффекта до Epoch [30]. Итак, я помню адаптированную скорость обучения в кафе, сначала я выбираю базу lr = 0,1, поскольку тренировка продолжается, lr распадается до 0,05, затем 0,025 и меньше. Имеет ли MxNet эту стратегию, как я могу ее использовать?Как использовать адаптированную скорость обучения в MxNet

ответ

1

У вас есть несколько вариантов, чтобы сделать это:

один является использование обратного вызова функцию в конце каждой партии/эпохи:

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)