Wie interpretiert man Histogramme von TensorFlow in TensorBoard?

23

Ich bin kürzlich gelaufen und habe Tensor Flow gelernt und ein paar Histogramme bekommen, die ich nicht interpretieren konnte. Normalerweise stelle ich mir die Höhe der Balken als Frequenz (oder relative Häufigkeit / Anzahl) vor. Die Tatsache, dass es keine Balken wie in einem normalen Histogramm gibt und die Tatsache, dass die Dinge schattiert sind, verwirrt mich. scheint es auch viele linien / höhen auf einmal zu geben?

Kennt sich jemand mit der Interpretation der folgenden Grafiken aus (und gibt möglicherweise gute Ratschläge, die beim Lesen von Histogrammen im Tensorflow allgemein hilfreich sein können):

Bildbeschreibung hier eingeben

Vielleicht sind einige andere interessante Dinge zu diskutieren: Wenn die ursprünglichen Variablen Vektoren oder Matrizen oder Tensoren waren, was zeigt dann der Tensorfluss tatsächlich, wie ein Histogramm für jede Koordinate? Vielleicht wäre es auch nett, darauf zu verweisen, wie man diese Informationen erhält, um die Menschen autark zu machen, da ich im Moment einige Schwierigkeiten hatte, nützliche Dinge in den Dokumenten zu finden. Vielleicht ein paar Tutorials zum Beispiel etc? Vielleicht wäre auch ein Ratschlag zur Manipulation hilfreich.


Als Referenz hier ein Auszug aus dem Code, der dies gab:

(X_train, Y_train, X_cv, Y_cv, X_test, Y_test) = data_lib.get_data_from_file(file_name='./f_1d_cos_no_noise_data.npz')
(N_train,D) = X_train.shape
D1 = 24
(N_test,D_out) = Y_test.shape
W1 = tf.Variable( tf.truncated_normal([D,D1], mean=0.0, stddev=std), name='W1') # (D x D1)
S1 = tf.Variable( tf.constant(100.0, shape=[]), name='S1') # (1 x 1)
C1 = tf.Variable( tf.truncated_normal([D1,1], mean=0.0, stddev=0.1), name='C1' ) # (D1 x 1)
W1_hist = tf.histogram_summary("W1", W1)
S1_scalar_summary = tf.scalar_summary("S1", S1)
C1_hist = tf.histogram_summary("C1", C1)
Pinocchio
quelle
2
Was auch immer diese Diagramme sind, sie sind definitiv keine Histogramme! Per Definition zeigt ein Histogramm die Wahrscheinlichkeit anhand von Bereichen .
Whuber
1
Der Punkt ist, dass Sie sich selbst in die Irre führen, indem Sie sie als "Histogramme" bezeichnen, die Gefahr besteht, dass Sie Ihre Leser in die Irre führen, und Sie verlieren die Gelegenheit, zu recherchieren, was gerade vor sich geht, weil Sie bei Ihrer Suche die falschen Schlüsselwörter verwenden. Das erste, was Sie tun sollten, ist Ihre Dokumentation zu konsultieren, um herauszufinden, wie es diese Diagramme nennt.
Whuber
1
@whuber ich nenne sie nicht Histogramme, sie nennen sich Histogramme! Dies ist einer der Befehle, mit denen ich diese Informationen gesammelt habe W1_hist = tf.histogram_summary("W1", W1). Es steht Histogramm, wie soll ich es sonst nennen? Ich weiß nicht, warum sie es Histogramm nennen würden, wenn es etwas anderes ist.
Pinocchio
1
Ich nehme an, ein Softwareentwickler kann ihre Funktionen beliebig benennen. Unabhängig vom Namen der Funktion handelt es sich jedoch einfach nicht um Histogramme in irgendeiner Form. Wir können hoffen, dass die Dokumentation erkennbare, konventionelle Namen verwendet oder zumindest beschreibt, wie diese Diagramme aufgebaut sind.
whuber
2
@Pinocchio, zwei Minuten googeln brachten mich zu github.com/tensorflow/tensorflow/blob/master/tensorflow/…, wo Sie nach unten scrollen können, um "Histogramme" zu lesen. Haben Sie diese Dokumentation schon gesehen?
Amöbe sagt Reinstate Monica

Antworten:

21

Derzeit ist der Name "Histogramm" eine falsche Bezeichnung. Den Beweis dafür finden Sie in der README . Die Bedeutung der Histogramm-Oberfläche könnte sich eines Tages ändern, wie dort angegeben. Dies ist jedoch das, was es derzeit bedeutet.

Die Grafiken in Ihrer Frage mischen verschiedene Läufe von TensorFlow. Schauen Sie sich stattdessen die folgenden Diagramme an, in denen nur ein Lauf angezeigt wird:

Bildbeschreibung hier eingeben

Zunächst möchte ich sagen, dass die Kurven selbst Perzentile darstellen . Ich werde das Bild von hier ausleihen :

Bildbeschreibung hier eingeben

Dies bedeutet, dass die mit 93% bezeichnete Kurve das 93. Perzentil ist, was bedeutet, dass 93% der Beobachtungen zum Zeitpunkt 1,00k unter dem Wert ~ 0,130 lagen. Die Grafik gibt also 3 Informationen an, wobei der Prozentsatz der Beobachtungen bei jedem Schritt der Berechnung des neuronalen Netzwerktrainings einen bestimmten Wert gemäß einer bestimmten Denkkurve unterschreitet (zumindest in diesem Fall ist dies die Bedeutung der Schritte). Dies vermittelt Ihnen ein Gefühl für die Werteverteilung Ihres Netzwerks.

Es gibt auch die Minimal- und Maximalwerte, um einen Eindruck vom Wertebereich während des Trainings zu bekommen.

Die y-Achse zeigt Ihnen den Wert, den Sie interessieren, und die Kurve zeigt Ihnen das Perzentil und die x-Achse am Schritt. Also, wenn Sie haben:

(x,fich(x)=y)

ichich

Pinocchio
quelle