Jak interpretować histogramy podane przez TensorFlow w TensorBoard?

23

Niedawno biegałem i uczyłem się przepływu tensora i otrzymałem kilka histogramów, których nie umiałem interpretować. Zazwyczaj myślę o wysokości słupków jako o częstotliwości (lub częstotliwości względnej / zliczeniach). Jednak fakt, że nie ma pasków jak na zwykłym histogramie oraz fakt, że rzeczy są zacienione, myli mnie. wydaje się, że jednocześnie jest wiele linii / wysokości?

Czy ktoś wie, jak interpretować następujące wykresy (i być może udzielić dobrej porady, która może ogólnie pomóc w czytaniu histogramów w tensorflow):

wprowadź opis zdjęcia tutaj

może niektóre inne rzeczy, które są interesujące do omówienia, to to, że jeśli pierwotnymi zmiennymi były wektory, macierze lub tensory, to co właściwie pokazuje przepływ tensor, jak histogram dla każdej współrzędnej? Również może warto odnieść się do tego, jak zdobyć te informacje, aby ludzie byli samowystarczalni, ponieważ miałem obecnie trudności z znalezieniem przydatnych rzeczy w dokumentach. Może przykładowe tutoriale itp.? Może przydałaby się też porada na temat manipulowania nimi.


Jako odniesienie, tutaj fragment kodu, który dał to:

(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)
Pinokio
źródło
2
Czymkolwiek są te wykresy, zdecydowanie nie są to histogramy! Z definicji histogram przedstawia prawdopodobieństwo za pomocą obszarów .
whuber
1
Chodzi o to, że nazywając je „histogramami”, wprowadzasz siebie w błąd, ryzykujesz wprowadzanie czytelników w błąd i tracisz możliwość badania tego, co się dzieje, ponieważ podczas wyszukiwania użyjesz niewłaściwych słów kluczowych. Pierwszą rzeczą, którą powinieneś zrobić, to zapoznać się z dokumentacją, aby dowiedzieć się, jak to się nazywa te wykresy.
whuber
1
@ whuber Nie nazywam ich histogramami, nazywają się histogramami! To jedno z poleceń, których użyłem do zebrania tych informacji W1_hist = tf.histogram_summary("W1", W1). Mówi histogram, co jeszcze mam to nazwać? Nie wiem, dlaczego nazwaliby to histogramem, skoro to coś innego.
Pinokio
1
Podejrzewam, że programista może nazwać swoje funkcje czymkolwiek zechce. Jednak niezależnie od nazwy funkcji, nie są to histogramy w żadnej formie. Możemy mieć nadzieję, że dokumentacja używa rozpoznawalnych, konwencjonalnych nazw lub - przynajmniej - opisuje sposób budowy tych wykresów.
whuber
2
@ Pinokio, dwie minuty googlingu zaprowadziły mnie na github.com/tensorflow/tensorflow/blob/master/tensorflow/…, gdzie można przewinąć w dół, aby przeczytać o „histogramach”. Czy widziałeś już tę dokumentację?
ameba mówi Przywróć Monikę

Odpowiedzi:

21

Obecnie nazwa „histogram” jest myląca. Dowody na to można znaleźć w README . Znaczenie interfejsu histogramu może pewnego dnia ulec zmianie, jak tam powiedziano. Jednak to właśnie obecnie oznacza.

Wykresy w twoim pytaniu mieszają różne przebiegi TensorFlow. Zamiast tego spójrz na następujące wykresy, które wyświetlają tylko jeden przebieg:

wprowadź opis zdjęcia tutaj

Po pierwsze, chciałbym powiedzieć, że same krzywe reprezentują percentyle . Pożyczę zdjęcie stąd :

wprowadź opis zdjęcia tutaj

co oznacza, że ​​krzywa oznaczona jako 93% jest 93. percentylem, co oznacza, że ​​93% obserwacji było poniżej wartości ~ 0.130 w kroku czasowym 1,00k. Tak więc wykres przedstawia 3 rzeczy, procent obserwacji poniżej pewnej wartości zgodnie z pewną krzywą myślową na każdym etapie obliczania treningu sieci neuronowej (przynajmniej w tym przypadku to, co oznaczają te kroki). Daje to poczucie rozkładu wartości w twojej sieci.

Istnieją również wartości minimalne i maksymalne, które pozwalają poznać zakres wartości podczas treningu.

Tak więc oś y informuje o interesującej cię wartości, a krzywa pokazuje percentyl i oś x na kroku. Więc jeśli masz:

(x,faja(x)=y)

jaja

Pinokio
źródło