2017-10-13 1 views
1

Ich lerne, Tensorflow-Bibliothek zu verwenden. Jedes Mal, wenn ich versuche, das einfachste Beispiel für gradientenbasiertes Lernen zu verwenden, bekomme ich den gleichen Fehler, der mich feststecken lässt. HierEinfachste überhaupt apply_gradients Würfe 'op' Attribut Fehler

ist der Code:

import tensorflow as tf 

x = tf.constant(1, dtype=tf.float32, name='X') 
a = tf.Variable(1, dtype=tf.float32, name= 'A') 
y = tf.constant(10, dtype=tf.float32, name='Y') 

ey = tf.multiply(x, a) 
los = (y - ey)**2 

optim = tf.train.GradientDescentOptimizer(learning_rate=0.2) 

sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
for counter in range(100): 
    grd = sess.run(optim.compute_gradients(loss=los)) 
    sess.run(optim.apply_gradients(grads_and_vars=grd)) 

In der letzten Zeile, ich folgende Fehlermeldung erhalten: Attribute: 'numpy.float32' Objekt hat kein Attribut 'op'.

Vielen Dank im Voraus für alle Tipps.

Antwort

0

Der Eingang von apply_gradients muss ein Tensor sein, kein numpy Array. Weil es nicht beabsichtigt ist, bei jedem Schritt des Lernens aufgerufen zu werden, sondern nur einmal beim Erstellen Ihres Graphen. In der Tat, „schafft“ den „Trainingsschritt“, in den Variablen aktualisiert werden

die berechneten Gradienten sollten Sie diese Art von Code verwenden, anstatt:

import tensorflow as tf 

x = tf.constant(1, dtype=tf.float32, name='X') 
a = tf.Variable(1, dtype=tf.float32, name= 'A') 
y = tf.constant(10, dtype=tf.float32, name='Y') 

ey = tf.multiply(x, a) 
los = (y - ey)**2 

optim = tf.train.GradientDescentOptimizer(learning_rate=0.2) 
grads, vars = zip(*optimizer.compute_gradients(loss)) 
train_step = optim.apply_gradients(grads_and_vars=grads) 

sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
for counter in range(100): 
    grd = sess.run(train_step, feed_dict = {...}) 
+0

Ha ... Verstanden. Vielen Dank! – Broono

Verwandte Themen