Was ist der Unterschied zwischen np.bedeuten und tf.reduce_mean?
In der MNIST Anfänger-tutorial, es ist die Aussage
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
tf.cast
im Grunde ändert den Typ von tensor das Objekt ist, aber was ist der Unterschied zwischen tf.reduce_mean
und np.bedeuten
?
Hier ist der doc auf tf.reduce_mean
:
reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
input_tensor
: Die tensor zu reduzieren. Sollte numerischen Typ.
reduction_indices
: Die Abmessungen zu reduzieren. WennNone
(der Fehler), reduziert alle Dimensionen.# 'x' is [[1., 1. ]] # [2., 2.]] tf.reduce_mean(x) ==> 1.5 tf.reduce_mean(x, 0) ==> [1.5, 1.5] tf.reduce_mean(x, 1) ==> [1., 2.]
Für einen 1D-Vektor, wie es aussieht np.mean == tf.reduce_mean
, aber ich verstehe nicht, was in tf.reduce_mean(x, 1) ==> [1., 2.]
. tf.reduce_mean(x, 0) ==> [1.5, 1.5]
Art von Sinn macht, da meine von [1,2] und [1,2] sind [1.5,1.5] aber was ist Los mit tf.reduce_mean(x,1)
?
- Sie produzieren unterschiedliche Ergebnisse auf ganzzahlige Werte durch die Aufteilung in python
- Ein wichtiger Unterschied für jene, die neu tensorflow:
tf.reduce_mean
ist multi-threaded, in der Regel berechnet auf die GPU, währendnp.mean
berechnet wird, auf einer einzelnen CPU. Auchtf
ist ausgelegt für eine batch-Daten in der Erwägung, dassnp
wirkt auf eine einzelne Daten-Instanz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktionalität von
numpy.mean
undtensorflow.reduce_mean
sind die gleichen. Sie tun die gleiche Sache. Aus der Dokumentation, für numpy und tensorflow, kannst du sehen. Betrachten wir ein Beispiel,Ausgabe
Hier kannst du sehen, dass wenn
axis
(numpy) oderreduction_indices
(tensorflow) 1 ist, berechnet bedeuten über (3,4) und (5,6) und (6,7), so1
definiert, über welche Achse der Mittelwert berechnet. Wenn es 0 ist, wird der Mittelwert berechnet sich über(3,5,6) und (4,6,7), und so weiter. Ich hoffe, Sie bekommen die Idee.Nun, was sind die Unterschiede zwischen Ihnen?
Können Sie berechnen numpy Betrieb überall auf python. Aber um das zu tun tensorflow Betrieb, es muss getan werden, innerhalb einer tensorflow
Session
. Lesen Sie mehr über es hier. Also, wenn Sie brauchen, um alle Berechnungen für Ihre tensorflow Grafik(oder die Struktur, wenn man so will), es muss getan werden, innerhalb einer tensorflowSession
.Betrachten wir ein weiteres Beispiel.
Konnten wir erhöhen damit meine
1
imnumpy
so würden Sie natürlich, aber um es zu tun, in tensorflow, die Sie durchführen müssen, die inSession
, ohneSession
können Sie nicht tun. In anderen Worten, wenn Sie computingtfMean = tf.reduce_mean(c)
, tensorflow nicht berechnen es dann. Es werden nur berechnet, dass in einemSession
. Aber numpy berechnet, die sofort, wenn Sie schreibennp.mean()
.Ich hoffe, es macht Sinn.
Der Schlüssel hier ist das Wort reduzieren, ein Konzept aus der funktionalen Programmierung, die es möglich macht, für reduce_mean in TensorFlow zu halten, einen Laufenden Durchschnitt der Ergebnisse von Berechnungen aus einem Stapel von Eingaben.
Wenn Sie nicht vertraut sind mit funktionalen Programmierung, das scheint geheimnisvoll. Also lasst uns zuerst sehen, was reduzieren hat. Wenn Sie eine Liste wie [1,2,5,4] und wurden angewiesen berechnen Sie den Mittelwert, das ist einfach - geben Sie einfach das gesamte array zu np.bedeuten, und Sie erhalten die meine. Doch was, wenn Sie hatte, um zu berechnen, den Mittelwert von einem Strom von zahlen? In diesem Fall müssten Sie zuerst montieren Sie das array durch Lesen aus dem stream und dann rufen np.bedeutet, dass die resultierende array - würden Sie schreiben mehr code.
Eine alternative ist die Nutzung der senken-Paradigma. Als Beispiel, schauen, wie können wir verwenden, reduzieren in python zur Berechnung der Summe der zahlen:
reduce(lambda x,y: x+y, [1,2,5,4])
.Funktioniert es so:
Lesen Sie hier mehr Funktionale Programmierung in Python
Um zu sehen, wie dies gilt für TensorFlow, betrachten Sie das folgende code-block definiert einen einfachen graph, der in einem Schwimmer durch und berechnet den Mittelwert. Die Eingabe der graph ist jedoch nicht eine einzelne Schwimmer, sondern ein array von floats. Die reduce_mean berechnet den Mittelwert über alle diejenigen, die schwimmt.
Dieses Muster kommt in handliches, wenn die computing-Werte über stapeln von Bildern. Blick auf Die Tiefe MNIST Beispiel wo sehen Sie code wie:
Die neue Dokumentation besagt, dass
tf.reduce_mean()
liefert die gleichen Ergebnisse wie np.bedeutet:Es hat auch absolut die gleichen Parameter wie np.meine. Aber hier ist ein wichtiger Unterschied: Sie produzieren die gleichen Ergebnisse nur auf float-Werte:
Wenn Sie entfernen den Typ der Konvertierung sehen Sie verschiedene Ergebnisse
Zusätzlich zu dieser, vielen anderen
tf.reduce_
Funktionen wiereduce_all
,reduce_any
,reduce_min
,reduce_max
,reduce_prod
produzieren die gleichen Werte, wie es numpy-Analoga. Klar, weil Sie Vorgänge, Sie kann nur ausgeführt werden, aus dem inneren der Sitzung.tf.reduce_mean
sorgt dafür, dass die Ausgabedtype
entspricht der Eingabedtype
. Die Ausgabe vonnp.mean()
ist immer ein float. Ist das richtig?1
in der Regel bezieht sich auf Zeilen, und2
in der Regel bezieht sich auf die Spalten. Die Reduzierung der "über" index1
Mittel zur Reduzierung rowwise.[1., 2.]
ist nur[ <row 1 mean> , <row 2 mean> ]
.Dieser index Nummerierung Konvention ist typisch in Statistik-software, vor allem R.