如何在tensorflow中复制变量

时间:2015-11-15 08:26:47

标签: tensorflow

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

4 个答案:

答案 0 :(得分:27)

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

(1)您想要创建一个 tensor ,其值与当前存储在变量中的值相同,我们会调用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。

答案 1 :(得分:6)

您可以通过多种方式完成此操作。

  • 这会为您创建一份副本:a = [1, 2, 3, 4, 5, 6] # y values of a line b = [7, 6, 4, 4, 8, 4] # x values are index location of the list previous = 0 result = [] for x, y in zip(a,b): if x == y: result.append(True) #touch else: comapre_result = 1 if x > y else -1 if comapre_result + previous == 0:#cross-over result.append(True) else: result.append(False) previous = comapre_result print result
  • 您还可以使用identity opv2 = tf.Variable(v1)(我认为这是一种正确的做法。

这是一个代码示例:

v2 = tf.identity(v1)

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

答案 2 :(得分:4)

执行深层复制

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

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

tf.intialize_all_variables()

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

答案 3 :(得分:0)

在TF2中: tf.identity()将为您做好事。最近,我在使用Google Colab中的函数时遇到了一些问题。如果这就是您在这里的原因,那么会对您有所帮助。

错误:无法将输入张量从/ job:localhost /副本:0 /任务:0 /设备:CPU:0复制到/ job:localhost /副本:0 /任务: 0 / device:GPU:0以运行身份:未找到方向为1和变量type_index的一元变体设备复制功能:tensorflow :: data::(匿名命名空间):: DatasetVariantWrapper [Op:Identity]

#Erroneous code
tensor1 = tf.data.Dataset.from_tensor_slices([[[1], [2]], [[3], [4]]])
tensor2 = tf.identity(tensor1)
#Correction
tensor1 = tf.data.Dataset.from_tensor_slices([[[1], [2]], [[3], [4]]])
with tf.device('CPU'): tensor2 = tf.identity(tensor1)