我无法按名称恢复张量,我什至不知道是否可能。
我有一个创建图的函数:
def create_structure(tf, x, input_size,dropout): with tf.variable_scope("scale_1") as scope: W_S1_conv1 = deep_dive.weight_variable_scaling([7,7,3,64], name='W_S1_conv1') b_S1_conv1 = deep_dive.bias_variable([64]) S1_conv1 = tf.nn.relu(deep_dive.conv2d(x_image, W_S1_conv1,strides=[1, 2, 2, 1], padding='SAME') + b_S1_conv1, name="Scale1_first_relu") . . . return S3_conv1,regularizer
我想在此函数之外访问变量S1_conv1。我试过了:
with tf.variable_scope('scale_1') as scope_conv: tf.get_variable_scope().reuse_variables() ft=tf.get_variable('Scale1_first_relu')
但这给了我一个错误:
ValueError:共享不足:不允许使用变量scale_1 / Scale1_first_relu。您是说要在VarScope中设置“ reuse = None”?
但这有效:
with tf.variable_scope('scale_1') as scope_conv: tf.get_variable_scope().reuse_variables() ft=tf.get_variable('W_S1_conv1')
我可以解决这个问题
return S3_conv1,regularizer, S1_conv1
但我不想那样做。
我认为我的问题是S1_conv1并不是一个真正的变量,它只是一个张量。有什么方法可以做我想要的吗?
有一个函数tf.Graph.get_tensor_by_name()。例如:
import tensorflow as tf c = tf.constant([[1.0, 2.0], [3.0, 4.0]]) d = tf.constant([[1.0, 1.0], [0.0, 1.0]]) e = tf.matmul(c, d, name='example') with tf.Session() as sess: test = sess.run(e) print e.name #example:0 test = tf.get_default_graph().get_tensor_by_name("example:0") print test #Tensor("example:0", shape=(2, 2), dtype=float32)