在numpy中,我可以使用numpy.copy创建变量的副本。有没有类似的方法,我可以用来在TensorFlow中创建Tensor的副本?
答案 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
v2 = 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)