¿Por qué nombramos variables en Tensorflow?

Resuelto randomizer asked hace 9 años • 4 respuestas

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"?

randomizer avatar Nov 11 '15 17:11 randomizer
Aceptado

El nameparámetro es opcional (puedes crear variables y constantes con o sin él), y la variable que uses en tu 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 documentos :

Por defecto, utiliza el valor de la propiedad Variable.name para cada 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()

No obstante, tiene variables matrix_1, matrix_2se guardan como v1en v2el archivo.

También se utilizan nombres en TensorBoard para mostrar claramente los nombres de los bordes . Incluso puedes agruparlos usando el mismo alcance :

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')
Salvador Dali avatar Nov 11 '2015 10:11 Salvador Dali

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

Lifu Huang avatar May 07 '2016 05:05 Lifu Huang

Considere el siguiente código de caso de uso y su resultado.

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()

producción:

[0,10108799]

NameError Traceback (última llamada más reciente) en () 10 print(sess123.run(fetches = [a])) 11 ---> 12 run123()

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

NameError: el nombre 'a' no está definido

La 'a', tal como se define en el alcance de f(), no está disponible fuera de su alcance, es decir, en run123(). Pero el gráfico predeterminado tiene que hacer referencia a ellos con algo, de modo que se pueda hacer referencia al gráfico predeterminado, según sea necesario, en varios ámbitos y ahí es cuando su nombre resulta útil.

figs_and_nuts avatar Sep 26 '2017 06:09 figs_and_nuts