Tensor Flow变量范围:

时间:2017-05-03 17:32:51

标签: variables scope tensorflow

为什么我们使用tf.variable_scope:

我知道它的某些东西链接创建一个实例的基本思想。但是在下面的代码和许多其他代码中,使用tf.get_variable不会在任何地方检索范围。那么范围的目的是什么?如果我不使用它会发生什么?

with tf.variable_scope("placeholder"):
    input = tf.placeholder(tf.float32, shape=[None, 1024])
    y_true = tf.placeholder(tf.int32, shape=[None, 1])
with tf.variable_scope('FullyConnected'):
    w = tf.get_variable('w', shape=[1024, 1024], 
initializer=tf.random_normal_initializer(stddev=1e-1))
    b = tf.get_variable('b', shape=[1024], 
initializer=tf.constant_initializer(0.1))
    z = tf.matmul(input, w) + b
    y = tf.nn.relu(z)

我没有看到任何地方以后使用的范围。服务的目的是什么。 我想知道如果删除它会发生什么

2 个答案:

答案 0 :(得分:1)

当您在张量板中显示该图形时,您将有一个“aha”时刻。

当您调试一些恼人的问题并且需要知道张量导致此错误消息或错误消息时,您将有另一个“aha”时刻。

你绝对需要做这些事情吗?不,不是真的。你可能还活着。但为什么不让你的未来生活更轻松?

我在汇总统计中广泛使用变量范围,因为它们很好地将事物分组到张量板中。我通常不会在OP显示的范围内这样做,但这样做确实没有坏处。

答案 1 :(得分:1)

我们使用变量范围的原因之一是在Tensorboard中汇总操作很有用。例如,请考虑以下示例:

g = tf.Graph()

with g.as_default() as g:

    tf_x = tf.Variable([[1., 2.], 
                        [3., 4.],
                        [5., 6.]], 
                       name='tf_x_0',
                       dtype=tf.float32)

    tf_y = tf.Variable([[7., 8.], 
                        [9., 10.],
                        [11., 12.]], 
                       name='tf_y_0',
                       dtype=tf.float32)

    # add custom name scope
    with tf.name_scope('addition'):
        output = tf_x + tf_y

    # add custom name scope
    with tf.name_scope('matrix_multiplication'):
        output = tf.matmul(tf.transpose(tf_x), output)

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    file_writer = tf.summary.FileWriter(logdir='logs/2', graph=g)
    result = sess.run(output)
    print(result)

enter image description here