首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用tensorflow ops编写函数时会发生什么?

当我使用tensorflow ops编写函数时会发生什么?
EN

Stack Overflow用户
提问于 2018-09-03 03:15:53
回答 2查看 93关注 0票数 1

我用tensorflow ops编写了一个函数。我知道,当我运行这个函数时,它会把很多操作添加到图中。但我对如何进入这些行动感到困惑。

例如:

代码语言:javascript
复制
def assign_weights():
    with tf.name_scope('zheng'):
        v = tf.Variable(0, 'v', dtype=tf.float32)
        b = tf.placeholder(tf.float32, shape=())
        z = tf.assign(v, b)
    return z, b

只有将feed_dict设置为返回值,才能使用ab值传递给b。否则,就无法访问b。如果我们想要访问函数范围中的许多操作,我们应该设置许多返回值。这很难看。

我想知道当我使用tensorflow运行函数时会发生什么,以及如何在函数范围内访问ops。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-03 05:43:27

显然,要访问op (或张量),我们需要一些参考。IMHO,一个标准的解决方法是在类中构建图,并使类的某些张量属性并通过对象访问它们。

或者,如果您更倾向于函数式方法,一个比分别返回所有相关操作和张量更好的方法是返回一个dict (或namedtuple)。

此外,还有一些按名称返回操作的专门函数:例如,get_operation_by_name

除了这个问题,您还可以尝试一下急切执行,这是必需的。

票数 1
EN

Stack Overflow用户

发布于 2018-09-03 09:16:52

当您使用op函数时,会发生3件事:

  • 创建计算节点并将其添加到默认图形
  • 将输入设置为节点输入张量。
  • 将节点输出张量设置为返回值

例如,a = tf.add(b, c, name='add')

  • 将带有op Add的节点添加到默认图形中,并使用名称' add‘
  • 将b和c设为节点输入张量
  • 将名为“add:0”的节点输出设置为

所以您可以通过sess.graph访问节点,有很多函数可以访问节点,比如get_operation_by_name。

此外,您还可以通过sess.graph_def操作该图形,这是一个带有protobuf的序列化图,您可以在tensorflow源代码、tensorflow/core/framework和一些.proto文件中找到protobuf定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52142773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档