2016-05-30 1 views
0

J'utilise l'impulsion nesterov pour mettre à jour les poids d'un réseau de neurones convolutif. J'utilise Lasagne pour construire un CNN. Comment mettre en œuvre la décroissance du taux d'apprentissage pour chaque époque?Déclin du taux d'apprentissage dans les lasagnes

prediction = lasagne.layers.get_output(network) 
loss = lasagne.objectives.categorical_crossentropy(prediction, target_var) 
params = lasagne.layers.get_all_params(network, trainable=True) 
lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9) 
train_fn = theano.function([input_var_1, input_var_2, target_var], loss, updates=updates) 
+0

Pouvez-vous utiliser adam comme dans Keras? Si oui, vous pouvez simplement utiliser adam ou un si ses variantes ... – pedrobisp

Répondre

0

Je pense que vous manque quelque chose:

prediction = lasagne.layers.get_output(network) 
loss = lasagne.objectives.categorical_crossentropy(prediction, target_var) 
params = lasagne.layers.get_all_params(network, trainable=True) 
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9) 
train_fn = theano.function([input_var_1, input_var_2, target_var], loss, updates=updates) 
3

Définir votre taux d'apprentissage comme un élément graphique

... 
learning_rate = T.scalar(name='learning_rate') 
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9) 
... 

Ajoutez votre noeud de taux d'apprentissage à train_fn

train_fn = theano.function([input_var_1, input_var_2, target_var, learning_rate], loss, updates=updates) 

maintenant vous êtes en mesure d'ajuster le taux d'apprentissage par exemple comme ceci:

base_lr = 1e-4 
lr_decay = 0.8 

for epoch in range(epochs): 
    lr = base_lr * (lr_decay ** epoch) 
    loss, updates = train_fn(input_1, input_2, target, lr)