2015-01-29 11 views
9

Gli aggiornamenti dei parametri della funzione di Theano prendono un elenco di coppie, in cui ogni coppia specifica una variabile simbolica condivisa e la sua nuova espressione dopo il calcolo degli output di funzione. Mi chiedo se ci sia un ordine per la procedura di aggiornamento. L'ordine è importante se la nuova espressione di due variabili simboliche dipende l'una dall'altra e la procedura di aggiornamento utilizzerà la variabile simbolica aggiornata per l'aggiornamento di altre variabili simboliche che si basano su di essa. Per esempi, questo elenco potrebbe assomiglia a questo,L'ordine di aggiornamento dell'elenco di aggiornamento della funzione theano

[(a, b + a), (b, b+ 1)] 

ho scritto qualche funzione per testare questo. Il risultato sembra indicare che utilizzare sempre il valore precedente nell'espressione (secondo termine della coppia) per aggiornare la variabile simbolica nel primo termine, cioè

a_new = b_old + a_old 
b_new = b_old + 1 

È questo un comportamento definito?

Tuttavia ho trovato l'attuazione di slancio here, Qui ci sono i codici per generare la lista di aggiornamento e param_update variabili simboliche

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable) 
updates += [(param, param - learning_rate*param_update), 
(param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param)) 

Poi, nella prima iterazione, non verrà aggiornato il parametro, perché param_updates sono tutto a zero. A mio avviso, param_update dovrebbe essere prima aggiornato, e quindi usarlo per aggiornare il parametro.

risposta

7

Per l'aggiornamento, utilizza sempre il valore precedente (il valore prima della chiamata della funzione Theano). Quindi hai trovato la cosa giusta.

Per il momento, penso che sia normale che ci sia un ritardo.