gpt4 book ai didi

python - 来自函数的 Tensorflow 占位符

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:54 24 4
gpt4 key购买 nike

我想做这样的事情:

def f():
place = tf.placeholder(tf.int32)
return 2 * place

y = f()

with tf.Session() as sess:
a = sess.run(y, feed_dict={ place: 5 })

当然,placeholder的地方在外面是看不到的。

NameError                                 Traceback (most recent call last)
<ipython-input-88-8b3c17d16dce> in <module>()
1 with tf.Session() as sess:
----> 2 a = sess.run(y, feed_dict={ place: 5 })

NameError: name 'place' is not defined

而且,我可以通过这种方式解决这个问题:

def f():
global place
place = tf.placeholder(tf.int32)
return 2 * place

但是,有没有人对此有更好的解决方案。如何在函数内部创建占位符并在外部为它提供值,当调用函数并将其返回值作为运算符传递给运行函数时,如上例所示。

最佳答案

您可以通过名称访问占位符:

import tensorflow as tf

def f():
place = tf.placeholder(tf.int32,name='place')
return 2 * place

y = f()

with tf.Session() as sess:
place = tf.get_default_graph().get_tensor_by_name('place:0')
a = sess.run(y, feed_dict={ place: 5 })

解释

无论何时定义占位符(或任何其他 TensorFlow 张量或操作),它都会添加到计算图中,计算图是一个位于后台并管理所有计算的对象。每个占位符都有一个默认名称,但您也可以为其选择一个名称。在此示例中,我选择了名称 place

现在,对于高级用例,您可能有多个计算图,但总有一个是默认图。为了获得默认值,我使用了 tf.get_default_graph()。然后为了获取对占位符的引用,我使用了 get_tensor_by_name('place:0')。 (我使用名称 'place:0' 而不是 'place' 因为当你定义一个占位符时,实际上是一个 tf.Tensor您可以创建 feed,还创建了一个执行 feeding 的操作。该操作的名称为 'place',而实际张量的名称为 'place:0'.)

关于python - 来自函数的 Tensorflow 占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52459843/

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