Подтвердить что ты не робот

Как я могу скопировать переменную в тензорном потоке

В numpy я могу создать копию переменной с numpy.copy. Есть ли аналогичный метод, который я могу использовать для создания копии тензора в TensorFlow?

4b9b3361

Ответ 1

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

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

tensor = tf.identity(var)

Но помните, что "тензор" представляет собой график node, который будет иметь это значение при оценке, и всякий раз, когда вы его оцениваете, он будет захватывать текущее значение var. Вы можете играть с операциями управления потоком, такими как 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 после того, как вы уже инициализировали график и начали работать.

Ответ 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

Оба из них напечатали те же самые тензоры.

Ответ 3

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

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

Он также правильно обрабатывает инициализацию, т.е.

tf.intialize_all_variables()

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