我的问题与此Tensorflow: How to get a tensor by name?
有关我可以给操作命名。但实际上他们的名字不同。 例如:
In [11]: with tf.variable_scope('test_scope') as scope:
...: a = tf.get_variable('a',[1])
...: b = tf.maximum(1,2, name='b')
...: print a.name
...: print b.name
...:
...:
...:
test_scope/a:0
test_scope_1/b:0
In [12]: with tf.variable_scope('test_scope') as scope:
...: scope.reuse_variables()
...: a = tf.get_variable('a',[1])
...: b = tf.maximum(1,2, name='b')
...: print a.name
...: print b.name
...:
...:
...:
test_scope/a:0
test_scope_2/b:0
tf.get_variable
创建的变量与我要求的名称完全相同。操作为作用域添加前缀。
我想命名我的操作,以便我可以得到它。在我的情况下,我想在我的范围内获得b
tf.get_variable('b')
。
我该怎么办?由于此问题https://github.com/tensorflow/tensorflow/issues/1325,我无法使用tf.Variable
执行此操作
可能是我需要为变量范围或操作设置附加参数,或以某种方式使用tf.get_variable
?
答案 0 :(得分:4)
我不同意@rvinas的回答,你不需要创建一个变量来保存你想要检索的张量值。您只需使用正确名称的graph.get_tensor_by_name
来检索张量:
with tf.variable_scope('test_scope') as scope:
a = tf.get_variable('a',[1])
b = tf.maximum(1,2, name='b')
print a.name # should print 'test_scope/a:0'
print b.name # should print 'test_scope/b:0'
现在您要重新创建相同的范围并返回a
和b
对于b
,您甚至不需要在范围内,只需要b
的确切名称。
with tf.variable_scope('test_scope') as scope:
scope.reuse_variables()
a2 = tf.get_variable('a', [1])
graph = tf.get_default_graph()
b2 = graph.get_tensor_by_name('test_scope/b:0')
assert a == a2
assert b == b2
答案 1 :(得分:3)
tf.get_variable()
无法进行操作。因此,我将定义一个存储tf.maximum(1,2)
的新变量,以便稍后检索它:
import tensorflow as tf
with tf.variable_scope('test_scope') as scope:
a1 = tf.get_variable('a', [1])
b1 = tf.get_variable('b', initializer=tf.maximum(1, 2))
with tf.variable_scope('test_scope') as scope:
scope.reuse_variables()
a2 = tf.get_variable('a', [1])
b2 = tf.get_variable('b', dtype=tf.int32)
assert a1 == a2
assert b1 == b2
请注意,您需要使用b
定义tf.get_variable()
,以便稍后检索。