Le taux d'apprentissage est la clé de l'effet de mon réseau. Lorsque je définis lr = 0.05, la précision du train/validation oscille fortement, cependant lr = 0.025 Je ne peux obtenir aucun effet avant Epoch [30]. Donc, je me souviens du taux d'apprentissage adapté dans caffe, d'abord je choisis une base lr = 0,1, que l'entraînement continue, lr décroît à 0,05, puis 0,025 et plus petit. Est-ce que MxNet a cette stratégie, comment l'utiliser?Comment utiliser le taux d'apprentissage adapté dans MxNet
2
A
Répondre
1
Vous avez deux options pour ce faire:
on est d'utiliser la fonction de rappel à la fin de chaque lot/époque:
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)
L'autre est d'utiliser l'un des le optimizers tel que AdaGrad ou 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)