Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印结果不一致_Python_Tensorflow_Deep Learning - Fatal编程技术网

Python 打印结果不一致

Python 打印结果不一致,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我试图理解tensorflow图中的执行顺序。当我运行下面的代码时tf.打印打印未确定的结果 将tensorflow导入为tf 对于范围内的(20): tf.reset_default_graph() 使用资源=False v=tf.Variable(0,trainable=False,use\u resource=use\u resource,name='v') v_op1=v.assign_add(1,name='v_op1') v_op2=v.assign_add(2,name='v_op

我试图理解tensorflow图中的执行顺序。当我运行下面的代码时<代码>tf.打印打印未确定的结果

将tensorflow导入为tf
对于范围内的(20):
tf.reset_default_graph()
使用资源=False
v=tf.Variable(0,trainable=False,use\u resource=use\u resource,name='v')
v_op1=v.assign_add(1,name='v_op1')
v_op2=v.assign_add(2,name='v_op2')
使用tf.control_依赖项([v_op1]):
w1=tf.print('msg1:',v,name='v--w')
使用tf.control_依赖项([w1,v_op2]):
w2=tf.print('msg2:',v',\n',name='w--w')
使用tf.Session()作为sess:
sess.run(tf.global\u variables\u initializer())
sess.run(w2)
这里是20次重复的输出。有时打印“msg1:3”,有时打印“msg1:1”。这是怎么回事

msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:1
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:3
msg2:3
msg1:1
msg2:3

我认为发生的事情是,你在w1和v_op2之间创建了一个竞赛,它们同时被执行。(带这些行)

具有tf.control_依赖项([w1,v_op2]):
例如,如果在w1之前执行v_op2,则将2添加到
v
,然后在执行w1时,将1添加到其中,使msg_1打印3。然而,当w1能够在v_op2执行之前完成时,则在v之后将2添加到
v

e、 g.案例1

v_op2 executed:
v = 2
w1 executed:
v = 3
print(v)
案例2

w1 executed
v = 1
print(v)
v_op2 executed
v=3

我认为现在发生的事情是你在w1和v_op2之间创造了一场竞赛,他们两个同时被执行。(带这些行)

具有tf.control_依赖项([w1,v_op2]):
例如,如果在w1之前执行v_op2,则将2添加到
v
,然后在执行w1时,将1添加到其中,使msg_1打印3。然而,当w1能够在v_op2执行之前完成时,则在v之后将2添加到
v

e、 g.案例1

v_op2 executed:
v = 2
w1 executed:
v = 3
print(v)
案例2

w1 executed
v = 1
print(v)
v_op2 executed
v=3

你使用的是什么版本的TF?就个人而言,我无法在TF1.12.0(CPU或GPU)上复制,但这可能取决于特定的机器设置。这些事情总是有点神秘,您可能会看到是否使用帮助,因为它应该确保变量与控件依赖项一起读取。我想发生的是,有时一个旧的、缓存的变量值会在控制依赖项下的操作中被提取,但老实说,我不确定这是否是预期的行为…@jdehesa我使用的是tf-1.14-gpu。我的猜测和你的一样。w1将在v_op2完成之前或之后读取v值…但我不确定其背后到底发生了什么…您使用的是什么版本的TF?就个人而言,我无法在TF1.12.0(CPU或GPU)上复制,但这可能取决于特定的机器设置。这些事情总是有点神秘,您可能会看到是否使用帮助,因为它应该确保变量与控件依赖项一起读取。我想发生的是,有时一个旧的、缓存的变量值会在控制依赖项下的操作中被提取,但老实说,我不确定这是否是预期的行为…@jdehesa我使用的是tf-1.14-gpu。我的猜测和你的一样。w1将在v_op2完成之前或之后读取v值…但我不确定它后面到底发生了什么…这似乎是现在唯一可能的原因。如果您正在编写实际代码,尽管我会尝试不使用相同变量的独立依赖项,这似乎是现在唯一可能的原因。如果您正在编写实际代码我会尽量避免使用相同变量的独立依赖项