Como se interpreta os histogramas dados pelo TensorFlow no TensorBoard?

23

Recentemente, eu estava correndo e aprendendo o fluxo tensor e obtive alguns histogramas que não sabia como interpretar. Normalmente, penso na altura das barras como a frequência (ou frequência / contagem relativa). No entanto, o fato de não haver barras como em um histograma usual e o fato de as coisas estarem sombreadas me confundem. também parece haver muitas linhas / alturas ao mesmo tempo?

Alguém sabe como interpretar os seguintes gráficos (e talvez forneça bons conselhos que possam ajudar em geral a ler histogramas no fluxo tensor):

insira a descrição da imagem aqui

talvez outras coisas interessantes de discutir sejam: se as variáveis ​​originais eram vetores, matrizes ou tensores, o que o fluxo de tensores mostra de fato, como um histograma para cada coordenada? Além disso, talvez fazer referência a como obter essas informações para tornar as pessoas auto-suficientes seria bom porque tive algumas dificuldades em encontrar coisas úteis nos documentos no momento. Talvez alguns tutoriais exemplo etc? Talvez alguns conselhos sobre como manipulá-los também fossem bons.


Como referência, aqui um extrato do código que forneceu isso:

(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)
Pinóquio
fonte
2
Quaisquer que sejam essas tramas, elas definitivamente não são histogramas! Por definição, um histograma descreve a probabilidade por meio de áreas .
whuber
1
O ponto é que, ao se referir a eles como "histogramas", você se engana, corre o risco de enganar seus leitores e perde oportunidades de pesquisar o que está acontecendo, porque usará as palavras-chave erradas em suas pesquisas. A primeira coisa que você deve fazer é consultar sua documentação para descobrir o que chama esses gráficos.
whuber
1
@whuber Eu não os estou chamando de histogramas, eles estão se chamando de histogramas! Este é um dos comandos que eu usei para coletar essas informações W1_hist = tf.histogram_summary("W1", W1). Diz histograma, como devo chamá-lo? Não sei por que eles chamariam de histograma quando é outra coisa.
Pinocchio
1
Suponho que um desenvolvedor de software possa nomear suas funções como quiser. Independentemente do nome da função, eles simplesmente não são histogramas de nenhuma forma. Podemos esperar que a documentação use nomes convencionais reconhecíveis ou - no mínimo - descreva como esses gráficos são construídos.
whuber
2
@ Pinóquio, dois minutos de pesquisa no Google me levaram ao github.com/tensorflow/tensorflow/blob/master/tensorflow/…, onde você pode rolar para baixo para ler sobre "histogramas". Você já viu esta documentação?
Ameba diz Reinstate Monica

Respostas:

21

Atualmente, o nome "histograma" é um nome impróprio. Você pode encontrar evidências disso no README . O significado da interface do histograma pode mudar algum dia, como eles disseram lá. No entanto, é isso que significa atualmente.

Os gráficos em sua pergunta combinam diferentes execuções do TensorFlow. Em vez disso, observe os seguintes gráficos que exibem apenas uma execução:

insira a descrição da imagem aqui

Primeiro, o que eu gostaria de dizer é que as próprias curvas representam percentis . Vou emprestar a foto daqui :

insira a descrição da imagem aqui

o que significa que a curva rotulada com 93% é o 93º percentil, o que significa que 93% das observações estavam abaixo do valor ~ 0,130 na etapa 1,00k. Portanto, o gráfico fornece três informações, a porcentagem de observações abaixo de um determinado valor, de acordo com algumas curvas de pensamento, a cada etapa do cálculo do treinamento da rede neural (pelo menos neste caso, é o que as etapas significam). Isso lhe dá uma ideia da distribuição de valores da sua rede.

Existem também os valores mínimo e máximo para ter uma noção do intervalo de valores durante o treinamento.

Portanto, o eixo y indica o valor que você está interessado e a curva indica o percentil e o eixo x na etapa. Então, se você tem:

(x,fEu(x)=y)

EuEu

Pinóquio
fonte