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

我使用 tensorflow ops 编写了一个函数。我知道当我运行该函数时,它会向图中添加许多操作。但我对如何访问这些操作感到困惑。


例如:


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将a值传递给。否则无法访问。如果我们想访问函数范围内的许多操作,我们应该设置许多返回值。这是非常丑陋的。bbb


我想知道当我使用 tensorflow 运行函数时会发生什么,以及如何访问函数作用域中的操作。


红颜莎娜
浏览 134回答 2
2回答

www说

显然,要访问操作(或张量),我们确实需要对它进行一些引用。恕我直言,一种标准的解决方法是在类中构建图形并创建类的某些张量属性并通过对象访问它们。或者,如果您更倾向于函数式方法,那么比分别返回所有相关操作和张量更好的方法是返回 dict(或命名元组)。此外,还有一些专门的函数可以按名称返回操作:例如get_operation_by_name.作为这个问题的旁白,您可能还想尝试急切执行,这是必不可少的。

汪汪一只猫

使用 op 函数时会发生 3 件事:创建计算节点并将其添加到默认图中将您的输入设置为节点输入张量将节点输出张量设置为返回值例如a = tf.add(b, c, name='add'),将带有 op 的节点添加Add到默认图形中,名称为“add”将 b 和 c 设置为节点输入张量将名称为“add:0”的节点输出设置为所以你可以通过 访问节点sess.graph,有很多函数可以访问节点,比如 get_operation_by_name。此外,您可以通过sess.graph_defprotobuf 序列化图来操作图,您可以在 tensorflow 源代码中找到 protobuf 定义,在那里可以找到tensorflow/core/framework一些 .proto 文件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python