tf.variable_scope and tf.name_scope

tf.variable_scope 可以让变量具有相同的命名,包括 tf.get_variable得到的变量,也包括 tf.Variable 得到的变量,

tf.name_scope 也可以让变量具有相同的命名,但只包括 tf.Variable 得到的变量。

import tensorflow as tf

with tf.variable_scope('V1'):
    a1 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')
with tf.variable_scope('V2'):
    a3 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a4 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    print(a1.name)
    print(a2.name)
    print(a3.name)
    print(a4.name)

输出

V1/a1:0
V1/a2:0
V2/a1:0
V2/a2:0
with tf.name_scope('V1'):
    a1 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')
with tf.name_scope('V2'):
    a3 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a4 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    print(a1.name)
    print(a2.name)
    print(a3.name)
    print(a4.name)

这样会报错

with tf.name_scope('V1'):
    # a1 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')
with tf.name_scope('V2'):
    a3 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a4 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    # print(a1.name)
    print(a2.name)
    print(a3.name)
    print(a4.name)

输出

V1/a2:0
a1:0
V2/a2:0

猜你喜欢

转载自www.cnblogs.com/yanshw/p/10530272.html