2015-12-27 29 views
12

ho un grafico computazionale tensorflow per un tensore perdita L che dipende da 2 tf.Variables, A e B.variabili tenendo costante durante ottimizzatore

Vorrei eseguire salita gradiente variabile A (A + = gradiente di L a A) mentre si tiene fisso B, e viceversa - con salita gradiente su B (B + = gradiente di L a B) mentre si tiene fisso A. Come faccio a fare questo?

risposta

26

tf.stop_gradient(tensor) potrebbe essere quello che stai cercando. Il tensore sarà trattato come costante per il calcolo del gradiente. È possibile creare due perdite con parti diverse trattate come costanti.

L'altra opzione (e spesso migliore) sarebbe quella di creare 2 ottimizzatori ma ottimizzare esplicitamente solo sottoinsiemi di variabili, ad es.

train_a = tf.train.GradientDescentOptimizer(0.1).minimize(loss_a, var_list=[A]) 
train_b = tf.train.GradientDescentOptimizer(0.1).minimize(loss_b, var_list=[B]) 

e si può scorrere tra di loro sugli aggiornamenti.

+0

Grazie - var_list dovrebbe fare bene. Anche se penso che ci sia un errore di battitura - var_list dovrebbe andare negli argomenti per minimizzare() piuttosto che GradientDescentOptimizer() – ejang

+0

Grazie, modificato lo snippet di codice. –

Problemi correlati