2015-11-11 4 views
15

An einigen Orten sah ich die Syntax, wo Variablen mit Namen initialisiert werden, manchmal ohne Namen. Zum Beispiel:Warum benennt man Variablen in Tensorflow?

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

# Without 
one = tf.constant(1) 

Was ist der Punkt, die Variable var"counter" der Namensgebung?

Antwort

27

Der Parameter name ist optional (Sie können Variablen und Konstanten mit oder ohne es erstellen), und die Variable, die Sie in Ihrem Programm verwenden, hängt nicht davon ab. Namen können in ein paar Orten hilfreich sein:

Wenn Sie Ihre Variablen speichern oder wiederherstellen möchten (Sie können save them to a binary file nach der Berechnung). Von docs:

By default, it uses the value of the Variable.name property for each 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() 

Dennoch haben Sie Variablen matrix_1, matrix_2 sie spart als v1, v2 in der Datei.

Auch Namen werden in TensorBoard verwendet, um Namen von Kanten schön anzuzeigen. Sie können sogar group them by using the same scope:

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

können Sie sich vorstellen, Python-Namespace und TensorFlow Namespace als zwei parallele Universen. Namen im TensorFlow-Bereich sind eigentlich die "echten" Attribute, die zu allen TensorFlow-Variablen gehören, während Namen im Python-Bereich nur temporäre Zeiger sind, die während dieser Skriptausführung auf TensorFlow-Variablen zeigen. Aus diesem Grund werden beim Speichern und Wiederherstellen von Variablen nur TensorFlow-Namen verwendet, da der Python-Namespace nach dem Beenden des Skripts nicht mehr vorhanden ist, der Tensorflow-Namespace jedoch immer noch in Ihren gespeicherten Dateien vorhanden ist.

0

könnte Ein weiterer Anwendungsfall sein:

[0,10108799]

Nameerror Traceback (jüngste Aufforderung zuletzt) ​​ :

den folgenden Code ein, und sein Ausgang

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

Ausgang betrachten in() 10 drucken (sess123.run (holt = [a])) ---> 12 run123()

in run123() 8 sess123.run (init) 9 print (sess123.run (abruft = [ 'test123: 0'])) ---> 10 drucken (sess123.run (abruft = [a])) 12 run123()

Nameerror: name 'a' nicht

Das 'a' definiert ist, wie sie in den Rahmen f definiert(), nicht außerhalb ihres Geltungsbereichs, dh in run123() verfügbar, aber das Standarddiagramm muss sich auf sie beziehen, so dass das Standarddiagramm nach Bedarf auf verschiedene Bereiche referenziert werden kann, und zwar dann, wenn es 'na' ist Ich 'kommt praktisch

Verwandte Themen