gpt4 book ai didi

python - 在默认情况下不创建新范围的情况下,如何在 tensorflow 中重用变量范围?

转载 作者:太空狗 更新时间:2023-10-29 21:54:08 25 4
gpt4 key购买 nike

我在图表的一部分创建了一个变量范围,稍后在图表的另一部分我想将 OP 添加到现有范围。这相当于这个提炼的例子:

import tensorflow as tf

with tf.variable_scope('myscope'):
tf.Variable(1.0, name='var1')

with tf.variable_scope('myscope', reuse=True):
tf.Variable(2.0, name='var2')

print([n.name for n in tf.get_default_graph().as_graph_def().node])

产生:

['myscope/var1/initial_value', 
'myscope/var1',
'myscope/var1/Assign',
'myscope/var1/read',
'myscope_1/var2/initial_value',
'myscope_1/var2',
'myscope_1/var2/Assign',
'myscope_1/var2/read']

我想要的结果是:

['myscope/var1/initial_value', 
'myscope/var1',
'myscope/var1/Assign',
'myscope/var1/read',
'myscope/var2/initial_value',
'myscope/var2',
'myscope/var2/Assign',
'myscope/var2/read']

我看到这个问题似乎没有直接解决问题的答案:TensorFlow, how to reuse a variable scope name

最佳答案

这是在上下文管理器中使用 assomename 来执行此操作的一种直接方法。使用此 somename.original_name_scope 属性,您可以检索该范围,然后向其中添加更多变量。下面是一个例子:

In [6]: with tf.variable_scope('myscope') as ms1:
...: tf.Variable(1.0, name='var1')
...:
...: with tf.variable_scope(ms1.original_name_scope) as ms2:
...: tf.Variable(2.0, name='var2')
...:
...: print([n.name for n in tf.get_default_graph().as_graph_def().node])
...:
['myscope/var1/initial_value',
'myscope/var1',
'myscope/var1/Assign',
'myscope/var1/read',
'myscope/var2/initial_value',
'myscope/var2',
'myscope/var2/Assign',
'myscope/var2/read']

备注
另请注意,设置 reuse=True 是可选的;也就是说,即使您传递了 reuse=True,您仍然会得到相同的结果。


另一种方法(感谢 OP 本人!)是在 重用 时在变量作用域的末尾添加 /,如下例所示:

In [13]: with tf.variable_scope('myscope'):
...: tf.Variable(1.0, name='var1')
...:
...: # reuse variable scope by appending `/` to the target variable scope
...: with tf.variable_scope('myscope/', reuse=True):
...: tf.Variable(2.0, name='var2')
...:
...: print([n.name for n in tf.get_default_graph().as_graph_def().node])
...:
['myscope/var1/initial_value',
'myscope/var1',
'myscope/var1/Assign',
'myscope/var1/read',
'myscope/var2/initial_value',
'myscope/var2',
'myscope/var2/Assign',
'myscope/var2/read']

备注:
请注意,设置 reuse=True 也是可选的;也就是说,即使您传递了 reuse=True,您仍然会得到相同的结果。

关于python - 在默认情况下不创建新范围的情况下,如何在 tensorflow 中重用变量范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49285112/

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