Keras, come funziona il decadimento del tasso di apprendimento SGD?


23

Se si osserva la documentazione http://keras.io/optimizers/ , nel SGD è presente un parametro per il decadimento. So che questo riduce il tasso di apprendimento nel tempo. Tuttavia, non riesco a capire come funzioni esattamente. È un valore che viene moltiplicato per il tasso di apprendimento in lr = lr * (1 - decay) modo esponenziale? Inoltre, come posso vedere quale tasso di apprendimento utilizza il mio modello? Quando stampo model.optimizer.lr.get_value()dopo aver eseguito un adattamento su alcune epoche restituisce il tasso di apprendimento originale anche se ho impostato il decadimento.

Devo anche impostare nesterov = True per usare lo slancio o ci sono solo due diversi tipi di slancio che posso usare. Ad esempio, c'è un punto per farlosgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

Risposte:


24

La documentazione a cui ti riferisci include un riferimento alla fonte Python (basta fare clic sul [Source]collegamento nella posizione appropriata), che può essere utilizzato per rispondere alle tue domande. Ecco la linea più pertinente, che mostra come decaymodifica il tasso di apprendimento:

lr = self.lr * (1. / (1. + self.decay * self.iterations))

L' nesterovopzione non deve essere impostata su True per poter utilizzare lo slancio; risulta che lo slancio viene utilizzato in un modo diverso, come si può vedere dalla fonte:

v = self.momentum * m - lr * g  # velocity

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v

1
e si self.iterationsriferisce al numero di singoli passi SGD, non al numero di epoche, rigt?
Guillefix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.