【问题标题】:How can I make tensorflow variables 'local'?如何使张量流变量“本地”?
【发布时间】:2017-04-13 19:25:11
【问题描述】:

tf.get_variable()tf.Variable() 生成的张量流变量似乎是全局变量。发生在我身上的情况如下:假设我制作了以下两个文件:

  1. main.py

    from prac_var import defineVar
    for i in range(1000):
        defineVar()
    
  2. prac_var.py

    import tensorflow as tf
    def defineVar():
        with tf.variable_scope('weight'):    
            W = tf.Variable(tf.zeros([1,1]),name='W')
            print('\n',tf.trainable_variables())
    

现在如果我运行 main.py,它会产生

[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>]

[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>, <tf.Variable 'weight_1/W:0' shape=(1, 1) dtype=float32_ref>]

[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>, <tf.Variable 'weight_1/W:0' shape=(1, 1) dtype=float32_ref>, <tf.Variable 'weight_2/W:0' shape=(1, 1) dtype=float32_ref>]
...

而我真正想要的是

[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>]
[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>]
[<tf.Variable 'weight/W:0' shape=(1, 1) dtype=float32_ref>]
...

我怎样才能以不平凡的方式解决这个问题?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    首先,我想知道您是否了解 Tensorflow 首先构建一个计算图,然后使用您定义的图进行所有计算。如果您知道变量的名称,则可以使用tf.get_variable() 从任何地方访问所有变量...

    如果您在两个不同的地方都获得权重,两次都试图获得变量W,那么您“重用”这些权重。这就是引入变量作用域的原因: https://www.tensorflow.org/programmers_guide/variable_scope#variable_scope_example

    如果你想拥有两个不同的权重,你可以说:

    with tf.variable_scope('mnistweights'):
      Wmnist = tf.get_variable('W',...)
    with tf.variable_scope('exampleweights'):
      Wtest = tf.get_variable('W',...)
    

    现在您有了名称为 mnistweights/W 和 exampleweights/W 的变量。

    希望你能更好地理解它!

    【讨论】:

    • 我想我没有向你清楚地表达我的观点。你能再看一遍吗?
    【解决方案2】:

    我无意中找到了解决问题的方法。就是加一行tf.reset_default_graph()

    1. main.py

      from prac_var import defineVar
      for i in range(1000):
          defineVar()
      
    2. prac_var.py

      import tensorflow as tf
      def defineVar():
          tf.reset_default_graph()
          with tf.variable_scope('weight'):    
              W = tf.Variable(tf.zeros([1,1]),name='W')
              print('\n',tf.trainable_variables())
      

    【讨论】:

    • 您到底想要什么?现在您删除权重并再次添加它们 1000 次...
    猜你喜欢
    • 2021-07-03
    • 2016-09-12
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2017-07-11
    相关资源
    最近更新 更多