¿Por qué nombramos variables en Tensorflow?


En algunos de los lugares, vi la sintaxis, donde las variables se inicializan con nombres, a veces sin nombres. Por ejemplo:

# With name
var = tf.Variable(0, name="counter")

# Without
one = tf.constant(1)

¿Cuál es el punto de nombrar la variable var "counter"?

Author: nbro, 2015-11-11

4 answers

El parámetro name es opcional (puede crear variables y constantes con o sin él), y la variable que utilice en su programa no depende de él. Los nombres pueden ser útiles en un par de lugares:

Cuando desee guardar o restaurar sus variables (puede guardarlas en un archivo binario después del cálculo). De docs :

Por defecto, utiliza el valor de la Variable.name propiedad para cada uno variable

matrix_1 = tf.Variable([[1, 2], [2, 3]], name="v1")
matrix_2 = tf.Variable([[3, 4], [5, 6]], name="v2")
init = tf.initialize_all_variables()

saver = tf.train.Saver()

sess = tf.Session()
sess.run(init)
save_path = saver.save(sess, "/model.ckpt")
sess.close()

Sin embargo, usted tiene variables matrix_1, matrix_2 se salvan como v1, v2 en el archivo.

También se usan nombres en TensorBoard para mostrar bien los nombres de los bordes . Puedes incluso agruparlos usando el mismo ámbito :

import tensorflow as tf

with tf.name_scope('hidden') as scope:
  a = tf.constant(5, name='alpha')
  W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
  b = tf.Variable(tf.zeros([1]), name='biases')
 33
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 10:10:40

Puede imaginar el espacio de nombres Python y el espacio de nombres TensorFlow como dos universos paralelos. Los nombres en el espacio TensorFlow son en realidad los atributos "reales" que pertenecen a cualquier variable TensorFlow, mientras que los nombres en el espacio Python son solo punteros temporales que apuntan a variables TensorFlow durante esta ejecución de su script. Esa es la razón por la que al guardar y restaurar variables, solo se utilizan nombres TensorFlow, porque el espacio de nombres Python ya no existe después de terminar el script, pero Tensorflow el espacio de nombres todavía está allí en sus archivos guardados.

 9
Author: Lifu Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-07 05:21:29

Considere el siguiente código de caso de uso y su salida

def f():
    a = tf.Variable(np.random.normal(), dtype = tf.float32, name = 'test123')

def run123():
    f()
    init = tf.global_variables_initializer()
    with tf.Session() as sess123:
        sess123.run(init)
        print(sess123.run(fetches = ['test123:0']))
        print(sess123.run(fetches = [a]))

run123()

Salida:

[0.10108799]

Rastreo de errores de nombre (llamada más reciente último) en () 10 print (sess123.ejecutar (fetches = [a])) 11 --- >12 run123 ()

En run123() 8 sess123.ejecutar(init) 9 print (sess123.run (fetches =['test123: 0'])) --- >10 impresión(sess123.ejecutar (fetches = [a])) 11 12 run123 ()

NameError: el nombre 'a' no está definido

La 'a', tal como se define en el ámbito de aplicación de f(), no está disponible fuera de su ámbito de aplicación, es decir, en run123 (). Pero el gráfico predeterminado tiene que referirse a ellos con algo, de modo que el gráfico predeterminado puede ser referenciado, según sea necesario, a través de varios ámbitos y es entonces cuando su nombre es útil.

 6
Author: MiloMinderbinder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 19:30:35

De hecho, desde el aspecto para distinguir diferentes variables, podemos usar totalmente el nombre de python (la parte izquierda del signo de asignación, y llamamos al nombre como python name para evitar confusiones. como v en el siguiente ejemplo) para nombrar las variables. Sin embargo, en el proceso de programación, por lo general rebindamos el nombre de python a otros objetos (es decir, el op en Tensorflow), por ejemplo,

v = tf.get_variable("v1", [3], initializer = tf.zeros_initializer)
v = tf.get_variable("v2", [5], initializer = tf.zeros_initializer)

En primer lugar, el nombre de python v enlaza la forma tensora primera línea (tf.get_variable("v1", [3], initializer = tf.zeros_initializer)). Entonces, el v rebind the tensor from the second line (tf.get_variable("v2", [5], initializer = tf.zeros_initializer)) y ya no enlaza el primer tensor. Si no le dimos al atributo tensorflow el nombre v1 y v2, ¿cómo podemos identificar el tensor desde la primera línea?

 0
Author: pangdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 07:51:25