gpt4 book ai didi

python - Session.run() 如何选择要运行的子图

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:32 24 4
gpt4 key购买 nike

我试图了解 Session.run() 在 Tensorflow 流中的工作原理。我知道 Session.run() 运行由我们提供的“fetch”参数指定的子图。由于根据首先执行子图的哪一部分,我们可能会得到不同的结果,因此我试图看看情况是否确实如此。假设我们比较这段代码的输出:

import tensorflow as tf

x = tf.Variable(42)
assign1 = tf.assign(x, 13)
assign2 = tf.assign(x, 14)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2, val3 = sess.run([x, assign1, assign2])
print(val1, val2, val3)

使用此代码:

import tensorflow as tf

x = tf.Variable(42)
assign2 = tf.assign(x, 14)
assign1 = tf.assign(x, 13)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2, val3 = sess.run([x, assign1, assign2])
print(val1, val2, val3)

(唯一的变化是在第二个代码中首先分配 14)。我期望看到第一个代码生成输出 14, 14, 14,而第二个代码生成输出 13, 13, 13。

但是,结果是第一个生成了 13, 13, 13,而第二个生成了 14, 14, 14。

为什么会发生这种情况?

<小时/>

更新:以下选择的答案:

我不太明白什么是独立的,什么不是。例如,在以下代码中:

x = tf.Variable([1, 2, 3, 4, 5])

def foo():
tmp_list = []
assign = tf.assign(x[4], 100)
for i in range(0, 5):
tmp_list.append(x[i])
return tmp_list

z = foo()

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
val1, val2 = sess.run([z, assign])
print(val1, val2)

在我的 Session.run() 中,我有 z 和 allocate。为了获得 z,我需要 foo()。当 foo() 运行时,也会运行 assign = tf.assign(x[4], 100) 。但是,输出是 [1, 2, 3, 4, 5] 13,我不知道 13 来自哪里。

最佳答案

无法保证首先执行哪一个独立操作,因此在这两种情况下您都可以获得 13 或 14 个。你的结果纯粹是运气。试试这个:

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(100):
val1, val2, val3 = sess.run([x, assign1, assign2])
print(val1, val2, val3)

...您将看到打印出 13 14。

<小时/>

更新后续问题:

z = foo() (这只是 x 切片的列表)不依赖于 assign。请注意,foo 在 session 启动之前仅被调用一次。我认为,最好的方式是在张量板上可视化该图。

如果你说...

sess.run(z)

...tensorflow 不会运行 assign,因为它不运行 python 函数,而是计算张量。并且张量xx[i]不依赖于操作分配

依赖性是由使用张量执行的操作定义的。所以如果你有...

y = x + 2

...这个依赖项:为了计算y,tensorflow必须计算x。希望现在可以更清楚了。

关于python - Session.run() 如何选择要运行的子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com