Il grafico TensorFlow viene generalmente creato gradualmente dagli ingressi alle uscite e quindi eseguito. Osservando il codice Python, gli elenchi di input delle operazioni sono immutabili, il che suggerisce che gli input non dovrebbero essere modificati. Significa che non c'è modo di aggiornare/modificare un grafico esistente?È possibile modificare un grafico di calcolo TensorFlow esistente?
risposta
Il tensorflow tf.Graph
classe è una sola accodamento struttura dati , il che significa che è possibile aggiungere i nodi al grafico dopo l'esecuzione parte del grafico, ma non è possibile rimuovere o modificare i nodi esistenti. Poiché TensorFlow esegue solo il sottografo necessario quando si chiama Session.run()
, non vi sono costi di esecuzione per avere nodi ridondanti nel grafico (sebbene continueranno a consumare memoria).
Per rimuovere tutti nodi nel grafico, è possibile creare una sessione con un nuovo grafico:
with tf.Graph().as_default(): # Create a new graph, and make it the default.
with tf.Session() as sess: # `sess` will use the new, currently empty, graph.
# Build graph and execute nodes in here.
Sì, tf.Graph
sono costruiti in modo di sola aggiunta come @mrry lo mette.
Ma non c'è soluzione:
Concettualmente è possibile modificare un grafico esistente clonandolo ed effettuare le modifiche necessarie lungo la strada. A partire da r1.1, Tensorflow fornisce un modulo denominato tf.contrib.graph_editor
che implementa l'idea di cui sopra come un insieme di funzioni convenienti.
Peccato che la documentazione sia scarsa riguardo a questi metodi –
"anche se continueranno a consumare memoria" - questa memoria è stata rilasciata quando la sessione è spazzatura raccolta dal runtime python? –