Der Schlüssel hier ist das Wort Reduzieren, ein Konzept aus der funktionalen Programmierung, das es Reduce_Mean in TensorFlow ermöglicht, einen laufenden Durchschnitt der Ergebnisse von Berechnungen aus einer Reihe von Eingaben zu erhalten.
Wenn Sie mit der funktionalen Programmierung nicht vertraut sind, kann dies mysteriös erscheinen. Lassen Sie uns zuerst sehen, was Reduzieren bewirkt. Wenn Sie eine Liste wie [1,2,5,4] erhalten haben und aufgefordert wurden, den Mittelwert zu berechnen, ist das einfach - übergeben Sie einfach das gesamte Array an np.mean und Sie erhalten den Mittelwert. Was wäre, wenn Sie den Mittelwert eines Zahlenstroms berechnen müssten? In diesem Fall müssten Sie zuerst das Array zusammenstellen, indem Sie aus dem Stream lesen, und dann np.mean für das resultierende Array aufrufen - Sie müssten etwas mehr Code schreiben.
Eine Alternative ist die Verwendung des Reduktionsparadigmas. Schauen Sie sich als Beispiel an, wie wir Reduce in Python verwenden können, um die Summe der Zahlen zu berechnen :
reduce(lambda x,y: x+y, [1,2,5,4])
.
Es funktioniert so:
- Schritt 1: Lesen Sie 2 Ziffern aus der Liste - 1,2. Bewerten Sie Lambda 1,2. Reduzieren speichert das Ergebnis 3. Hinweis - Dies ist der einzige Schritt, bei dem 2 Ziffern aus der Liste gelesen werden
- Schritt 2: Lesen Sie die nächste Ziffer aus der Liste - 5. Bewerten Sie Lambda 5, 3 (3 ist das Ergebnis von Schritt 1, das die Speicherung reduziert). Reduzieren speichert das Ergebnis 8.
- Schritt 3: Lesen Sie die nächste Ziffer aus der Liste - 4. Bewerten Sie Lambda 8,4 (8 ist das Ergebnis von Schritt 2, der die Speicherung reduziert). Reduzieren speichert das Ergebnis 12
- Schritt 4: Lesen Sie die nächste Ziffer aus der Liste - es gibt keine, geben Sie also das gespeicherte Ergebnis von 12 zurück.
Lesen Sie hier mehr Funktionale Programmierung in Python
Um zu sehen, wie dies auf TensorFlow zutrifft, sehen Sie sich den folgenden Codeblock an, der ein einfaches Diagramm definiert, das einen Float aufnimmt und den Mittelwert berechnet. Die Eingabe in das Diagramm ist jedoch kein einzelner Float, sondern ein Array von Floats. Der redu_mean berechnet den Mittelwert über alle diese Floats.
import tensorflow as tf
inp = tf.placeholder(tf.float32)
mean = tf.reduce_mean(inp)
x = [1,2,3,4,5]
with tf.Session() as sess:
print(mean.eval(feed_dict={inp : x}))
Dieses Muster ist praktisch, wenn Werte über mehrere Bildstapel berechnet werden. Schauen Sie sich das Deep MNIST-Beispiel an, in dem Sie Code wie folgt sehen:
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))