Path: blob/master/site/pt-br/tensorboard/dataframe_api.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
Acesso aos dados do TensorBoard como DataFrames
Visão geral
O principal recurso do TensorBoard é a GUI interativa. No entanto, às vezes, os usuários querem ler programaticamente os logs de dados armazenados no TensorBoard, para fins como realizar análises post-hoc e criar visualizações personalizadas para os dados dos logs.
O TensorBoard 2.3 oferece suporte a esse caso de uso com tensorboard.data.experimental.ExperimentFromDev()
. Ele permite o acesso programático aos logs escalares do TensorBoard. Esta página demonstra o uso básico dessa nova API.
Observação:
Essa API ainda está em fase experimental, conforme refletido pelo seu namespace. Isso significa que ela está sujeita a mudanças que causam quebras no futuro.
No momento, esse recurso só aceita logdirs carregados no TensorBoard.dev, um serviço hospedado gratuito para manter e compartilhar seu TensorBoard. O suporte ao logdir do TensorBoard armazenado localmente será adicionado no futuro. Rapidamente, você pode enviar um logdir do TensorBoard no seu sistema de arquivos local para o TensorBoard.dev com uma única linha de comando:
tensorboard dev upload --logdir <logdir>
. Veja a documentação em tensorboard.dev para mais detalhes.
Configuração
Para usar a API programática, instale o pandas
com o tensorboard
.
Vamos usar matplotlib
e seaborn
para as plotagens personalizadas neste guia, mas você pode escolher a ferramenta da sua preferência para analisar e visualizar DataFrame
s.
Carregue escalares do TensorBoard como pandas.DataFrame
Depois de enviar um logdir do TensorBoard para o TensorBoard.dev, ele se torna o que chamamos de experimento. Cada experimento tem um ID único, que pode ser encontrado na URL do TensorBoard.dev do experimento. Para nossa demonstração abaixo, vamos usar um experimento do TensorBoard.dev em: https://tensorboard.dev/experiment/c1KCv3X3QvGwaXfgX1c4tg
df
é um pandas.DataFrame
que contém todos os logs escalares do experimento.
As colunas do DataFrame
são:
run
: cada execução (run) corresponde a um subdiretório do logdir original. Nesse experimento, cada execução é de um treinamento completo de uma rede neural convolucional (CNN) no dataset MNIST com um determinado tipo de otimizador (um hiperparâmetro de treinamento). EsseDataFrame
contém várias execuções assim, que correspondem a execuções de treinamento repetidas em diferentes tipos de otimizadores.tag
: descreve o que ovalue
na mesma linha significa, ou seja, a métrica que o valor representa na linha. Nesse experimento, só temos duas tags únicas:epoch_accuracy
eepoch_loss
para as métricas de exatidão e perda, respectivamente.step
: é um número que reflete a ordem serial da linha correspondente na sua execução. Aqui,step
se refere ao número de épocas. Para obter os carimbos de data/hora, além dos valores destep
, você pode usar o argumento de palavra-chaveinclude_wall_time=True
ao chamarget_scalars()
.value
: é o valor numérico de interesse. Como descrito acima, cadavalue
nesseDataFrame
específico é uma perda ou uma precisão, dependendo datag
da linha.
Obtenha um DataFrame pivotado (formato amplo)
Em nosso experimento, as duas tags (epoch_loss
e epoch_accuracy
) estão presentes no mesmo conjunto de passos em cada execução. Isso possibilita obter um DataFrame
de "formato amplo" diretamente de get_scalars()
ao usar o argumento de palavras-chave pivot=True
. O DataFrame
de formato amplo tem todas as tags inclusas como colunas do DataFrame, sendo mais conveniente em alguns casos, incluindo esse.
No entanto, se a condição para ter conjuntos uniformes de valores de passos em todas as tags e em todas as execuções não for atendida, o uso de pivot=True
resultará em um erro.
Observe que, em vez de uma única coluna de "valor", o DataFrame de formato amplo inclui duas tags (métricas) como suas colunas de maneira explícita: epoch_accuracy
e epoch_loss
.
Salve o DataFrame como CSV
pandas.DataFrame
tem uma boa interoperabilidade com o CSV. Você pode armazená-lo como um arquivo de CSV local e carregá-lo novamente mais tarde. Por exemplo:
Personalize a visualização e faça a análise estatística
As plotagens acima mostram as evoluções temporais da exatidão de validação e da perda de validação. Cada curva mostra a média em 5 execuções com um tipo de otimizador. Devido a uma funcionalidade integrada de seaborn.lineplot()
, cada curva também exibe o desvio-padrão ±1 em torno da média, o que fornece uma sensação clara de variabilidade nessas curvas e a significância das diferenças entre os três tipos de otimizadores. Essa visualização de variabilidade ainda não é compatível com a GUI do TensorBoard.
Queremos estudar a hipótese de que a perda de validação mínima difere significativamente entre os otimizadores "adam", "rmsprop" e "sgd". Portanto, extraímos um DataFrame para a perda de validação mínima em cada um dos otimizadores.
Em seguida, criamos um diagrama de caixa para visualizar a diferença nas perdas de validação mínimas.
Portanto, em um nível de significância de 0,05, nossa análise confirma a hipótese que a perda de validação mínima é significativamente mais alta (ou seja, pior) no otimizador rmsprop em comparação com os outros dois otimizadores inclusos em nosso experimento.
Resumindo, esse tutorial oferece um exemplo de como acessar os dados escalares como panda.DataFrame
s a partir do TensorBoard.dev. Ele demonstra o tipo de análise e visualização flexível e avançada que você pode fazer com os DataFrame
s.