2015-11-15 3 views

risposta

2

È possibile farlo in due modi.

  • questo creerà una copia: v2 = tf.Variable(v1)
  • è anche possibile utilizzare identity op: v2 = tf.identity(v1) (che credo sia un modo corretto di farlo

Ecco un esempio di codice:.

import tensorflow as tf 

v1 = tf.Variable([[1, 2], [3, 4]]) 
v_copy1 = tf.Variable(v1) 
v_copy2 = tf.identity(v1) 

init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 
a, b = sess.run([v_copy1, v_copy2]) 
sess.close() 

print a 
print b 

Entrambi sarebbero stampare gli stessi tensori.

+0

Non è specificato se vogliamo una copia superficiale o profonda. Penso che sia più sicuro presumere che si tratti di una copia profonda. in tal caso tf.Variable (source_variable.initialized_value()) – siemanko

+0

@nivwusquorum puoi mostrarmi l'esempio quando l'identità fallirà? –

+0

deepq learning richiede ad esempio una copia profonda della rete q al posto della rete di destinazione. – siemanko

2

Questo esegue una copia profonda

copied_variable = tf.Variable(source_variable.initialized_value()) 

Gestisce anche intialization correttamente, cioè

tf.intialize_all_variables() 

sarà correttamente inizializzare prima source_variable e quindi copiare tale valore per copied_variable

+0

ancora in attesa del tuo esempio: http://stackoverflow.com/a/33717784/1090562 –

20

hai chiesto come copiare un variabile nel titolo, ma come copiare un tensore nella domanda. Diamo un'occhiata alle diverse risposte possibili.

(1) che si desidera creare un tensore che ha lo stesso valore che viene attualmente memorizzato in una variabile di che chiameremo var.

tensor = tf.identity(var) 

Ma ricordate, 'tensore' è un nodo grafico che avrà quel valore quando valutato, e ogni volta che si calcola esso, sarà afferrare il valore di corrente di var. Puoi giocare con control flow ops such as with_dependencies() per vedere l'ordinamento degli aggiornamenti della variabile e la tempistica dell'identità.

(2) Si desidera creare un'altra variabile e impostarne il valore per il valore attualmente memorizzato in una variabile:

import tensorflow as tf 
var = tf.Variable(0.9) 
var2 = tf.Variable(0.0) 
copy_first_variable = var2.assign(var) 
init = tf.initialize_all_variables() 
sess = tf.Session() 

sess.run(init) 

print sess.run(var2) 
sess.run(copy_first_variable) 
print sess.run(var2) 

(3) Si vuole definire una variabile e impostarne il valore di partenza per lo stesso cosa che già inizializzata una variabile (questo è ciò che nivwu .. sopra rispose):

var2 = tf.Variable(var.initialized_value()) 

var2 otterrà inizializzato quando si chiama tf.initialize_all_variables. Non puoi usarlo per copiare var dopo che hai già inizializzato il grafico e hai iniziato a eseguire le cose.

+0

'with_dependencies()' cambiato, vedi: http://stackoverflow.com/questions/37980078/tensorflow-has-no-attribute- con dipendenze –

+0

@dga riguardo al tuo punto (1), non sarebbe meglio semplicemente creare un tensore costante in qualche modo lungo le linee di tensor = tf.constant (var) tale che la copia non dipenda da var? – Alex