Tensorflow——tf.variable_scope和tf.name_scope的用法

综述

  • tf.variable_scope
    可以让变量有相同的命名,包括tf.get_variable得到的变量,还有tf.Variable的变量
  • tf.name_scope
    可以让变量有相同的命名,只是限于tf.Variable的变量

tf.variable_scope

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

import tensorflow as tf;    
import numpy as np;    
import matplotlib.pyplot as plt;    
  
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

tf.name_scope

可以让变量有相同的命名,只是限于tf.Variable的变量

import tensorflow as tf;    
import numpy as np;    
import matplotlib.pyplot as plt;    
  
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  

报错:Variable a1 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

换成下面的代码就可以执行:

import tensorflow as tf;    
import numpy as np;    
import matplotlib.pyplot as plt;    
  
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
V2/a2:0

    原文作者:SpareNoEfforts
    原文地址: https://www.jianshu.com/p/17e8519aa4e3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞