Tutorial do TensorBoard: Visualização de grafos do TensorFlow

⚔ Resumo Inteligente

O TensorBoard Ʃ a interface visual para execuƧƵes de treinamento do TensorFlow, exibindo curvas de perda, grƔficos de modelos, histogramas de pesos e embeddings. Este tutorial mostra como gravar arquivos de eventos com um estimador e, em seguida, abrir o painel na porta 6006.

  • šŸ”˜ Cinco painĆ©is de controle: Escalares, GrĆ”ficos, DistribuiƧƵes, Histogramas e Projetores leem cada um um tipo de resumo diferente.
  • ā˜‘ļø Diretório de log: O argumento model_dir define onde o TensorFlow grava os arquivos events.out.tfevents.
  • āœ… Comando de inicialização: Execute o comando `tensorboard –logdir=PATH` e, em seguida, abra `http://localhost:6006` em qualquer navegador.
  • 🧪 Taxa de aprendizagem: Uma curva de perda irregular indica uma taxa muito alta para que o modelo convirja.
  • šŸ› ļø TensorFlow 2: O callback do TensorBoard do Keras substitui o registro do estimador mostrado no exemplo original.
  • āš ļø Solução de problemas: Um painel vazio quase sempre significa que o caminho do diretório de logs nĆ£o corresponde Ć  execução do treinamento.

Tutorial do TensorBoard: Visualização de grafos do TensorFlow

O que Ć© TensorBoard?

O TensorBoard Ć© a interface usada para visualizar o grĆ”fico e outras ferramentas para entender, depurar e otimizar o modelo. Ɖ uma ferramenta que fornece mĆ©tricas e visualizaƧƵes para um fluxo de trabalho de aprendizado de mĆ”quina. Ele ajuda track mĆ©tricas como perda e precisĆ£o, visualizar o grafo do modelo e projetar embeddings em espaƧos de menor dimensĆ£o.

O TensorBoard Ć© fornecido com TensorFlow e funciona como um pequeno servidor web local que lĆŖ os arquivos de eventos que uma tarefa de treinamento grava no disco.

Exemplo de visualização de grafos do TensorFlow usando o TensorBoard

A imagem abaixo Ć© do grĆ”fico do TensorBoard que vocĆŖ irĆ” gerar neste tutorial. Ɖ o painel principal:

Painel do TensorBoard Scalars mostrando a curva de perda mƩdia do regressor DNN treinado.

Na imagem abaixo você pode ver o painel de visualização do grÔfico TensorBoard. O painel contém diferentes guias, que estão vinculadas ao nível de informação que você adiciona ao executar o modelo.

Barra de navegação do TensorBoard com as abas Escalares, GrÔficos, Distribuições, Histogramas e Projetores.

  • Escalares: Exibir diferentes informaƧƵes Ćŗteis durante o treinamento do modelo.
  • GrĆ”ficos: Mostre o modelo
  • Histograma: Exibir pesos com um histograma
  • Distribuição: Exibir a distribuição do peso
  • Projetor: Apresente a anĆ”lise de componentes principais e o algoritmo T-SNE. A tĆ©cnica utilizada para redução de dimensionalidade.

Neste tutorial do TensorBoard, você treinarÔ um modelo simples. deep learning modelo, e o grÔfico que ele produz é lido de baixo para cima.

Ao observar o grÔfico, você poderÔ entender como o modelo funciona. Os marcadores numerados na captura de tela abaixo indicam essas quatro etapas:

  1. Enfileirar os dados para o modelo: enviar uma quantidade de dados igual ao tamanho do lote para o modelo, ou seja, número de dados alimentados após cada iteração
  2. Alimente os dados aos Tensores
  3. Treine o modelo
  4. Exiba o nĆŗmero de lotes durante o treinamento. Salve o modelo no disco.

GrÔfico do TensorFlow no TensorBoard com nós numerados para a fila de entrada, o bloco da rede neural profunda (DNN) e a operação de salvamento.

A ideia bÔsica por trÔs do TensorBoard é que uma rede neural pode se comportar como uma caixa preta, e você precisa de uma ferramenta para inspecionar o que estÔ dentro dessa caixa. Pense no TensorBoard como uma lanterna para mergulhar na rede.

Ajuda a compreender as dependências entre as operações, como os pesos são calculados, exibe a função de perda e muitas outras informações úteis. Ao reunir todas essas informações, você tem uma ótima ferramenta para depurar e descobrir como melhorar o modelo.

Para que você tenha uma ideia de quão útil o grÔfico do TensorBoard pode ser, observe as duas curvas de perda abaixo:

Duas curvas de perda do TensorBoard lado a lado, comparando um modelo que não aprende com um modelo que converge.

Uma rede neural decide como conectar os diferentes neurÓnios e quantas camadas são necessÔrias para que o modelo possa prever um resultado. Uma vez definida a arquitetura, você precisa não apenas treinar o modelo, mas também uma métrica que meça a precisão da previsão. Essa métrica é chamada de função de perda, e o objetivo é minimizÔ-la, o que significa simplesmente que o modelo comete menos erros.

Todo algoritmo de treinamento repete o cÔlculo diversas vezes até que a perda atinja uma linha mais plana. Minimizar a perda também requer uma taxa de aprendizado, que é a velocidade com que o modelo aprende. Se a taxa de aprendizado for muito alta, o modelo nunca terÔ tempo de aprender nada: isso é o que mostra o grÔfico à esquerda, onde a linha oscila porque o modelo estÔ, na prÔtica, fazendo suposições. O grÔfico à direita mostra a perda diminuindo ao longo das iterações até que a curva se estabilize, o que significa que o modelo encontrou uma solução.

O TensorBoard é uma ótima ferramenta para visualizar essas métricas e destacar possíveis problemas. Uma rede neural pode levar horas ou semanas para encontrar uma solução, e o TensorBoard atualiza as métricas enquanto o processo ainda estÔ em andamento. Portanto, você não precisa esperar até o final para verificar se o modelo estÔ sendo treinado corretamente: abra o TensorBoard, verifique o andamento do treinamento e faça os ajustes necessÔrios.

Como usar o TensorBoard?

Nesta seção, você aprenderÔ como abrir o TensorBoard a partir do terminal. macOS e a partir da linha de comando em WindowsO foco aqui é a ferramenta, e não o modelo, portanto o código de treinamento é mantido propositalmente curto.

Primeiro, vocĆŖ precisa importar as bibliotecas que usarĆ” durante o treinamento.

## Import the library
import tensorflow as tf
import numpy as np

VocĆŖ cria os dados. Trata-se de uma matriz com 10000 linhas e 5 colunas.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

saĆ­da

(10000, 5)

O código abaixo transforma os dados e cria o modelo.

Observe que a taxa de aprendizado é igual a 0.1. Se você alterar essa taxa para um valor maior, o modelo não encontrarÔ uma solução. Foi isso que aconteceu no lado esquerdo da imagem acima.

O exemplo usa um estimador do TensorFlow, a API de alto nível que encapsula os cÔlculos matemÔticos. Os estimadores pertencem à API do TensorFlow 1.x, portanto, os dois trechos de código abaixo funcionam em uma instalação da versão 1.x ou por meio do... tf.compat.v1 espaço para nome.

Para criar os arquivos de log, vocĆŖ precisa especificar o caminho. Isso Ć© feito com o argumento. model_dir.

No exemplo do TensorBoard abaixo, você armazena o modelo dentro do diretório de trabalho, ou seja, onde você armazena o notebook ou Python arquivo. Dentro desse caminho, o TensorFlow criarÔ uma pasta chamada train com uma subpasta chamada linreg.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

saĆ­da

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

A última etapa deste exemplo de visualização de grafos com TensorFlow consiste no treinamento do modelo. Durante o treinamento, o TensorFlow grava informações no diretório do modelo.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

saĆ­da

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

No TensorFlow 2, a mesma tarefa é realizada pelo callback do TensorBoard do Keras, que grava o grafo e as métricas por época sem qualquer código de estimativa:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

Após a conclusĆ£o da execução, o diretório de logs contĆ©m um arquivo de ponto de verificação. graph.pbtxt arquivo e um ou mais events.out.tfevents arquivos — exatamente o que o TensorBoard lĆŖ.

Para macOS usuƔrios

A visualização do Finder abaixo mostra a nova pasta train/linreg criada dentro do diretório de trabalho.

macOS Lista de arquivos mostrando as pastas de logs de treinamento e registro linear com arquivos de checkpoint, eventos e graph.pbtxt.

Para Windows usuƔrios

On Windows Os mesmos arquivos aparecem no caminho que você passou para model_dir, conforme destacado na barra de endereços.

Windows Visão do explorador da pasta train linreg contendo arquivos de evento e checkpoint do TensorFlow.

O mesmo formato de arquivo de evento é produzido por PyTorchPortanto, o painel de controle não se limita a execuções do TensorFlow.

Agora que você tem os eventos de log gravados, pode abrir o TensorBoard. O TensorBoard utiliza a porta 6006 por padrão (Jupyter (usa a porta 8888). Use o Terminal em macOS ou o prompt do Anaconda em Windows.

Para macOS usuƔrios

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

O notebook estĆ” armazenado no caminho /Users/Guru99/tutor_TF

Para Windows usuƔrios

cd C:\Users\Admin\Anaconda3
activate hello-tf

O notebook Ć© armazenado no caminho C:\Users\Admin\Anaconda3

Para iniciar o TensorBoard, execute o seguinte comando a partir desse diretório.

Para macOS usuƔrios

tensorboard --logdir=./train/linreg

Para Windows usuƔrios

tensorboard --logdir=.\train\linreg

O TensorBoard é então disponibilizado em http://localhost:6006

Bandeira O que ele controla
--logdir Diretório que contém os arquivos de eventos. Esta é a única opção obrigatória.
--port Porta a ser utilizada. O padrão é 6006; altere-a caso uma sessão anterior ainda esteja utilizando essa porta.
--bind_all Disponibilize em todas as interfaces de rede. O TensorBoard se vincula apenas ao localhost por padrão, portanto, o acesso remoto requer essa flag, e ela não pode ser combinada com --host.
--reload_interval Com que frequência, em segundos, o diretório de logs é verificado novamente em busca de novos dados?
--logdir_spec Recurso de fallback legado que aceita vÔrios caminhos separados por vírgulas; --logdir não suporta mais esse formulÔrio.

O tensorboard dev O subcomando não funciona mais: o serviço TensorBoard.dev hospedado foi desativado em 1º de janeiro de 2024. O uso local não foi afetado.

Em algumas mƔquinas, o console exibe o nome do host em vez de localhost, como no prompt do Anaconda abaixo. Ambos os endereƧos abrem o mesmo painel de controle.

O prompt do Anaconda executa o comando tensorboard e imprime o endereƧo do servidor na porta 6006.

Copie e cole o endereço no seu navegador preferido. Você deverÔ ver o painel da Scalars mostrado abaixo.

O painel do TensorBoard Scalars serÔ aberto em um navegador após o diretório de logs ser carregado corretamente.

Se, em vez disso, vocĆŖ vir algo como isto:

Erro de leitura da pÔgina do TensorBoard: Nenhum arquivo de definição de grafo foi encontrado.

Isso significa que o TensorBoard não consegue encontrar o arquivo de log. Certifique-se de apontar para ele. cd para o caminho correto ou verifique novamente se o evento de log foi realmente criado. Caso contrÔrio, execute o código de treinamento novamente.

Para fechar o TensorBoard, pressione CTRL+C na janela do terminal.

Dica: verifique o prompt do Anaconda para obter o diretório de trabalho atual.

Prompt do Anaconda mostrando o ambiente hello-tf ativo e o diretório de trabalho atual.

Na captura de tela acima, o prompt estĆ” localizado em C:\Users\Admin, portanto, o arquivo de log deve ser criado nessa pasta.

Perguntas Frequentes

Uma execução concluída deixa um índice de checkpoint, um ou mais arquivos model.ckpt, um arquivo graph.pbtxt e pelo menos um arquivo events.out.tfevents. O TensorBoard lê apenas os arquivos de eventos; os checkpoints existem para que o treinamento possa ser retomado de onde parou.

Sim. Travas deslizantes portĆ”teis PyTorch envia um resumoWriter que emite o mesmo formato de arquivo de evento, portanto o comando `tensorboard --logdir` idĆŖntico renderiza o painel. Nada no servidor muda — apenas a biblioteca que produz os resumos.

Não. O serviço hospedado foi encerrado em 1º de janeiro de 2024 e o subcomando `tensorboard dev` agora retorna um erro. Compartilhe os resultados executando o TensorBoard dentro de um notebook, como por exemplo: Google Colab, ou exportando os grÔficos como CSV ou JSON.

Crie uma subpasta para cada execução dentro de uma pasta principal compartilhada e, em seguida, aponte o parâmetro `--logdir` para a pasta principal. Cada subpasta aparecerÔ como uma execução separada no painel esquerdo, e as curvas serão desenhadas nos mesmos eixos, cada uma com uma caixa de seleção.

O grÔfico de nível operacional é a visualização padrão e mostra como o TensorFlow interpreta o programa, desenhado de baixo para cima. Selecionar a tag keras alterna para o grÔfico conceitual, que mostra apenas as camadas do modelo e é mais fÔcil de comparar com o seu projeto.

As varreduras automatizadas geram dezenas de execuções simultaneamente, transformando o painel em uma ferramenta de comparação em vez de um monitor de execução única. O plugin HParams registra cada configuração juntamente com suas métricas, permitindo classificar os ensaios em vez de analisar as curvas uma a uma.

Copiloto do GitHub Gera rapidamente o código boilerplate de callbacks e summary-writer. Considere a saída como um rascunho: ela frequentemente mistura APIs do TensorFlow 1.x e 2.x, portanto, verifique cada nome na documentação atual antes de executar o código.

Ou nenhum arquivo de evento foi gravado ou o caminho passado para –logdir nĆ£o corresponde ao usado pelo trabalho de treinamento. Confirme se existe um arquivo events.out.tfevents nessa pasta e, em seguida, verifique se ele estĆ” presente. Windows Inicie o TensorBoard a partir da mesma letra de unidade.

Resuma esta postagem com: