如何在tensorflow中复制变量

ran*_*zer 17 tensorflow

在numpy中,我可以使用numpy.copy创建变量的副本.是否有类似的方法,我可以用来在TensorFlow中创建Tensor的副本?

dga*_*dga 31

您询问了如何复制标题中的变量,但如何复制问题中的张量.让我们看看不同的可能答案.

(1)您想要创建一个具有相同值的张量,该值目前存储在我们将调用的变量var.

tensor = tf.identity(var)
Run Code Online (Sandbox Code Playgroud)

但请记住,'tensor'是一个图形节点,在评估时会有该值,并且无论何时评估它,它都会获取当前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)
Run Code Online (Sandbox Code Playgroud)

(3)你想要定义一个变量并将它的起始值设置为你已经初始化变量的相同的东西(这是nivwu ..以上的答案):

var2 = tf.Variable(var.initialized_value())
Run Code Online (Sandbox Code Playgroud)

var2你打电话时会被初始化tf.initialize_all_variables.在初始化图形并开始运行之后,您无法使用它来复制var.


Sal*_*ali 7

您可以通过几种方式完成此操作.

  • 这将创建一个副本: 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
Run Code Online (Sandbox Code Playgroud)

他们两个都会打印相同的张量.

  • @niwu - 张量流变量没有"浅"或"深"副本.变量持有张量,张量没有指针.但请看我的回答为什么只做v_copy1 = tf.Variable(v1)可能也不正确 - 你可能会尝试在v1初始化之前获取v1的值,而使用.initialized_value()将添加一个控件依赖项,以便在抓取之前初始化v1.但术语"浅"和"深"复制具有特定的技术含义,在此不适用. (2认同)

sie*_*nko 5

执行深层复制

copied_variable = tf.Variable(source_variable.initialized_value())
Run Code Online (Sandbox Code Playgroud)

它还可以正确地处理初始化,即

tf.intialize_all_variables()
Run Code Online (Sandbox Code Playgroud)

会先正确初始化source_variable,然后将该值复制到copyed_variable