Tensorflow obtener todas las variables del ámbito

Tengo algunas variables creadas dentro de un determinado ámbito como este:

with tf.variable_scope("my_scope"):
  createSomeVariables()
  ...

Luego quiero obtener la lista de todas las variables en «my_scope» así que me puede pasar a un optimizador. ¿Cuál es la manera correcta de hacerlo?

InformationsquelleAutor Vlad Firoiu | 2016-04-10

2 Kommentare

  1. 77

    Creo que quiere tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, alcance=’my_scope’). De esta manera se consigue que todas las variables en un ámbito.

    Para pasar a un optimizador no desea todos variables que sólo desea que la instrucción de las variables. Aquellos que se mantienen también en una colección predeterminada, que es tf.GraphKeys.TRAINABLE_VARIABLES.

    • tf.GraphKeys.VARIABLES está en desuso en v0.12 (como he aprendido de esta respuesta: stackoverflow.com/a/40918792/1827383). Uso tf.GraphKeys.GLOBAL_VARIABLES lugar.
    • ¿tiene usted tiene que crear un artículo y, a continuación, ejecute en una sesión? Parece que el código está incompleto, ¿te importa que lo que es autónomo?
    • Gracias por tu respuesta! Cómo acerca de esta situación: hay dos sub ámbitos tf.variable_scope(1st) y tf.variable_scope(2nd) dentro de un ámbito tf.variable_scope(main) y quiero conseguir dos listas de los alcances de la 1st y 2nd con el fin de optimizar por separado.
    • Creo que esta respuesta es errónea (probado en tensorflow 1.4). tf.get_collection se presenta por su NOMBRE ámbito de aplicación, y no por el ámbito de la VARIABLE. Usted puede tener un montón de variables declaradas, en virtud de variable_scope(«foo»), y tf.get_collection(..,»foo») devolverá nada.
    • Uno puede querer para detectar el alcance automáticamente el nombre: tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=tf.get_variable_scope().name)
  2. 14

    Usuario señaló correctamente que usted necesita tf.get_collection(). Solo voy a dar un simple ejemplo de cómo hacerlo:

    import tensorflow as tf
    
    with tf.name_scope('some_scope1'):
        a = tf.Variable(1, 'a')
        b = tf.Variable(2, 'b')
        c = tf.Variable(3, 'c')
    
    with tf.name_scope('some_scope2'):
        d = tf.Variable(4, 'd')
        e = tf.Variable(5, 'e')
        f = tf.Variable(6, 'f')
    
    h = tf.Variable(8, 'h')
    
    for i in tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='some_scope'):
        print i   # i.name if you want just a name

    Aviso de que usted puede proporcionar cualquiera de los graphKeys y el alcance es una expresión regular:

    ámbito de aplicación: (Opcional). Si se suministra, la lista resultante se filtra a
    incluir sólo los elementos cuyo atributo name partidos con re.partido. Elementos
    sin un nombre de atributo nunca se devuelven si el alcance es suministrado y
    la elección o la re.partido significa que un ámbito sin fichas especiales
    filtros por el prefijo.

    Así que si usted va a pasar ‘some_scope’ usted recibirá 6 variables.

    • lo que si yo quería poner todas las otras variables en un sistema de recogida selectiva. Por ejemplo, GLOBAL_VARIABLES contiene a a la h, y ‘some_scope’ termina con la a a la f, pero luego quiero tener una segunda operación que sólo se pone algo que no está en mi colección (sin usar el regex)
    • ¿Cómo se usa este vinculado con la sesión.run() para obtener la lista de variables ?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea