В numpy я могу создать копию переменной с numpy.copy. Есть ли аналогичный метод, который я могу использовать для создания копии тензора в TensorFlow?Как скопировать переменную в tensorflow
ответ
Вы можете сделать это несколькими способами.
- это создаст вам копию:
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
Оба они будут печататься же тензоры.
Это выполняет глубокую копию
copied_variable = tf.Variable(source_variable.initialized_value())
Он также обрабатывает intialization должным образом, то есть
tf.intialize_all_variables()
будет правильно инициализировать source_variable первым, а затем скопировать это значение copied_variable
все еще ждет вашего примера: http://stackoverflow.com/a/33717784/1090562 –
Вы спросили, как скопировать переменная в названии, но как скопировать тензор в вопросе. Давайте рассмотрим разные возможные ответы.
(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 после того, как вы уже инициализировали график и начали работать.
'with_dependencies()' изменен, см .: http://stackoverflow.com/questions/37980078/tensorflow-has-no-attribute- с-зависимостями –
@dga относительно вашей точки (1), было бы лучше просто создать постоянный тензор каким-то образом вдоль линий тензора = tf.constant (var), чтобы копия не зависела от var? – Alex
Это не указано, если мы хотим получить мелкую или глубокую копию. Я думаю, что безопаснее предположить, что речь идет о глубокой копии. в этом случае tf.Variable (source_variable.initialized_value()) – siemanko
@nivwusquorum вы можете показать мне пример, когда личность не сработает? –
Обучение глубокому обучению требует, например, глубокой копии q сети вместо целевой сети. – siemanko