2015-11-15 6 views

ответ

2

Вы можете сделать это несколькими способами.

  • это создаст вам копию: v2 = tf.Variable(v1)
  • вы можете также использовать identity op: v2 = tf.identity(v1) (который я думаю, что это правильный способ сделать это

Вот пример кода:.

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 

Оба они будут печататься же тензоры.

+0

Это не указано, если мы хотим получить мелкую или глубокую копию. Я думаю, что безопаснее предположить, что речь идет о глубокой копии. в этом случае tf.Variable (source_variable.initialized_value()) – siemanko

+0

@nivwusquorum вы можете показать мне пример, когда личность не сработает? –

+0

Обучение глубокому обучению требует, например, глубокой копии q сети вместо целевой сети. – siemanko

2

Это выполняет глубокую копию

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

Он также обрабатывает intialization должным образом, то есть

tf.intialize_all_variables() 

будет правильно инициализировать source_variable первым, а затем скопировать это значение copied_variable

+0

все еще ждет вашего примера: http://stackoverflow.com/a/33717784/1090562 –

20

Вы спросили, как скопировать переменная в названии, но как скопировать тензор в вопросе. Давайте рассмотрим разные возможные ответы.

(1) Вы хотите создать тензор который имеет такое же значение, которое в настоящее время хранится в переменной , что мы называем var.

tensor = tf.identity(var) 

Но помните, что «Тензором» является узлом графа, который будет иметь то значение при оценке, и в любое время оценить его, он будет захватывать значение varтока. Вы можете поиграть с control flow ops such as with_dependencies(), чтобы увидеть заказ обновлений для переменной и время идентификации.

(2) Вы хотите создать еще одну переменную и установите его значение на значение в настоящее время хранится в переменной:

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) Вы хотите определить переменную и установить его начальное значение, к тому же что вы уже инициализированы переменный (это то, что nivwu .. выше ответила):

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

var2 будет инициализирован при вызове tf.initialize_all_variables. Вы не можете использовать это для копирования var после того, как вы уже инициализировали график и начали работать.

+0

'with_dependencies()' изменен, см .: http://stackoverflow.com/questions/37980078/tensorflow-has-no-attribute- с-зависимостями –

+0

@dga относительно вашей точки (1), было бы лучше просто создать постоянный тензор каким-то образом вдоль линий тензора = tf.constant (var), чтобы копия не зависела от var? – Alex