2016-10-21 3 views
2

Ich bin ein TensorFlow Tutorial folgen und den Code unten läuft, aber in Variable Fehler bei der Initialisierung ausgeführt wird:Variable Initialisierung Fehler in Tensorflow

num_points = 1000 
vectors_set = [] 
for i in range(num_points): 
     x1= np.random.normal(0.0, 0.55) 
     y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03) 
     vectors_set.append([x1, y1]) 

x_data = [v[0] for v in vectors_set] 
y_data = [v[1] for v in vectors_set] 
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
b = tf.Variable(tf.zeros([1])) 
y = W * x_data + b 
loss = tf.reduce_mean(tf.square(y - y_data)) 
optimizer = tf.train.GradientDescentOptimizer(0.5) 
train = optimizer.minimize(loss) 
init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 

und die Fehlermeldung generiert wird:

FailedPreconditionError: Attempting to use uninitialized value Variable_3 
    [[Node: Variable_3/read = Identity[T=DT_INT64, _class=["loc:@Variable_3"], _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_3)]] 
Caused by op 'Variable_3/read', defined at: 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/runpy.py", line 184, in _run_module_as_main 
    "__main__", mod_spec) 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/runpy.py", line 85, in _run_code 
    exec(code, run_globals) 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/ipykernel/__main__.py", line 3, in <module> 
    app.launch_new_instance() 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/traitlets/config/application.py", line 653, in launch_instance 
    app.start() 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/ipykernel/kernelapp.py", line 474, in start 
    ioloop.IOLoop.instance().start() 
    File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/zmq/eventloop/ioloop.py", line 162, in start 
    super(ZMQIOLoop, self).start() 

Kann jemand beraten wie kann ich das korrigieren?

+0

der gleiche Code funktioniert. Ich denke, ich habe mehrere Sitzungen mit demselben Namen in Ipython Notebook erstellt. Kann jemand dazu kommentieren, wenn mehrere Tensorflow-Sitzungen erstellt werden, die sich gegenseitig überschreiben würden und Fehler verursachen würden? – Abhi

Antwort

2

Schöne ... ein Crash-Geständnis, anstatt eine Fehlermeldung. Ich vermute, dass etwas in Ihrem Setup eine Ihrer formellen TF-Variablen hängen ließ, wahrscheinlich einen der Ein-Buchstaben-Namen. Um zu debuggen, schlage ich vor, dass Sie nach jeder Initialisierung eine einfache print-Anweisung einfügen, um den berechneten Wert oder zumindest den variablen Typdeskriptor zu melden. Zum Beispiel:

x_data = [v[0] for v in vectors_set] 
y_data = [v[1] for v in vectors_set] 
print (x_data, y_data) 
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
print (W) 
b = tf.Variable(tf.zeros([1])) 
print(b) 
... 

wird nicht nur diese Spur Datenwert, aber wenn das Programm wieder abstürzt, werden Sie eine Spur, wo sie gestorben - mehr Informationen, die Sie nicht aus der Stack-Trace erhalten haben du bin oben angekommen.

Ja, das ist schmutzig und Low-Tech ... aber es wird Sie zu einer Lösung so schnell wie alles, was ich weiß, bekommen, es sei denn, Sie haben Ihren Debugger bereits auf diesem Programm gestartet.

2

Sie befinden sich in einem ipython Notebook läuft, besser ist es, immer Umfang der Konstruktion des Graphen und die Sitzung Instanziierung wie folgt aus:

g = tf.Graph() 
with g.as_default(): 
    ... build your graph .. 

with tf.Session() as sess: 
    sess.run(...) 

Dies verhindert, dass die gleichen Variablen auf den Standard Graph hinzuzufügen, und garantiert, dass Sie immer die gleiche Grafik haben.

Um zu verstehen, das Problem weiter:

, wenn Ihr eine Zelle mehrere Mal, wenn etwas einfach laufen wie

a = tf.Variable() 

Es ist in der tf.default_graph() jedes Mal, wenn ein NEW Variable zu schaffen.

Das Scoping verhindert dies, indem jedes Mal ein neuer Graph erstellt wird.

+0

Danke für das Detail !! – Abhi

Verwandte Themen