2016-03-10 13 views
5

Can TensorFlow calcola automaticamente i calcoli se coinvolgono più chiamate allo stesso grafico (secondario) di calcolo?Can computations della cache TensorFlow (sotto)?

Ad esempio, ho una matrice F in cui ogni voce rappresenta un calcolo basato su variabili formabili W. La mia funzione obiettivo moltiplica questa matrice diverse volte con diversi vettori (ogni ora con W invariato).

TensorFlow si calcola, ad esempio, F[1,2] ogni volta che accedo a o memorizza tale valore nella cache?

In teoria, si potrebbe precompute matrice F data una fissa W, tale che ogni voce in F è un tf.constant. Ma sarebbe impedire il calcolo corretto dei gradienti di W.

+0

Questa domanda sembra correlata: http://stackoverflow.com/questions/34536340/how-to-use-tensorflow-optimizer-without-recomputing-activations-in-reinforcement –

risposta

2

TensorFlow esegue una quantità limitata di memorizzazione nella cache, ma probabilmente non copre il caso che descrivi.

Se si crea un tf.Session con le seguenti opzioni, costante pieghevole sarà abilitata:

config = tf.ConfigProto(graph_options=tf.GraphOptions(
    optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L2))) 
sess = tf.Session(config=config) 

Quando si chiama sess.run() con questa configurazione, tensorflow valuteranno i nodi appropriati per l'esecuzione, quindi identificare il sottografo di quelli nodi i cui output sono costanti, valutarli e memorizzare nella cache i risultati. Pertanto, eviterà di rieseguire il calcolo ridondante.

Tuttavia, nella domanda si menziona che F è una funzione di alcune variabili addestrabili. Dal punto di vista di TensorFlow, queste variabili sono volatili — che possono cambiare in qualsiasi momento — in modo che non memorizzi nella cache i valori derivati ​​da queste variabili. Se si desidera riutilizzare lo stesso valore per F più volte, è possibile considerare di archiviarlo in un tf.constant() in modo che l'ottimizzazione del piegamento costante sia più utile.

+0

Grazie per le informazioni. Vedo che l'opzione 'tf.OptimizerOptions.L1' fa' common_subexpression_elimination' e 'tf.OptimizerOptions.L2' fa' constant_folding'. Ma se quelle opzioni non gestiscono correttamente i gradienti non funzionerebbe per il mio caso. –

+0

Entrambe le ottimizzazioni non dovrebbero avere alcun effetto sulla semantica del tuo programma, quindi dovresti gestire correttamente i gradienti. Tuttavia, poiché la maggior parte del calcolo del gradiente dipende dai valori delle variabili attuali, non mi aspetto un grande aumento della velocità (forse un po 'di percentuale, a causa dell'eliminazione del sovraccarico di dispacciamento operativo). – mrry

Problemi correlati