我用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将b值传递给b。否则,就无法访问b。如果我们想要访问函数范围中的许多操作,我们应该设置许多返回值。这很难看。
我想知道当我使用tensorflow运行函数时会发生什么,以及如何在函数范围内访问ops。
谢谢!
发布于 2018-09-03 05:43:27
显然,要访问op (或张量),我们需要一些参考。IMHO,一个标准的解决方法是在类中构建图,并使类的某些张量属性并通过对象访问它们。
或者,如果您更倾向于函数式方法,一个比分别返回所有相关操作和张量更好的方法是返回一个dict (或namedtuple)。
此外,还有一些按名称返回操作的专门函数:例如,get_operation_by_name。
除了这个问题,您还可以尝试一下急切执行,这是必需的。
发布于 2018-09-03 09:16:52
当您使用op函数时,会发生3件事:
例如,a = tf.add(b, c, name='add'),
Add的节点添加到默认图形中,并使用名称' add‘所以您可以通过sess.graph访问节点,有很多函数可以访问节点,比如get_operation_by_name。
此外,您还可以通过sess.graph_def操作该图形,这是一个带有protobuf的序列化图,您可以在tensorflow源代码、tensorflow/core/framework和一些.proto文件中找到protobuf定义。
https://stackoverflow.com/questions/52142773
复制相似问题