如何通过变量/占位符的名称获取引用?

8 python machine-learning neural-network deep-learning tensorflow

我所指的名字是:

tf.placeholder(tf.float32, name='NAME')
tf.get_variable("W", [n_in, n_out],initializer=w_init())
Run Code Online (Sandbox Code Playgroud)

我有几个占位符,我想从外部函数访问而不传递引用,假设存在给定名称的占位符存在如何获得对它们的引用?(这是在图形构建期间,而不是运行时)

我的第二个问题是,无论范围如何,我如何获得具有给定名称的所有变量?

示例:我的所有权重在许多范围内都具有名称"W",我想将它们全部放入列表中.我不想手动添加每一个.偏见也可以这样做,假设我想做直方图.

rvi*_*nas 12

首先,您可以使用tf.Graph.get_tensor_by_name()获取占位符.例如,假设您使用的是默认图:

placeholder1 = tf.placeholder(tf.float32, name='NAME')
placeholder2 = tf.get_default_graph().get_tensor_by_name('NAME:0')
assert placeholder1 == placeholder2
Run Code Online (Sandbox Code Playgroud)

其次,我将使用以下函数来获取具有给定名称的所有变量(无论其范围如何):

def get_all_variables_with_name(var_name):
    name = var_name + ':0'
    return [var for var in tf.all_variables() if var.name.endswith(name)]
Run Code Online (Sandbox Code Playgroud)

  • `op_name:0`表示"张量,它是名为`op_name`的操作的第0个输出." 因此你可以使用`...:1`来获得具有多个输出的操作的输出,但是`tf.placeholder()`和`tf.Variable`都是单输出操作,因此你总是使用`...:0 `为他们. (9认同)