Tutorial do TensorBoard: visualização do gráfico do TensorFlow [exemplo]

O que é TensorBoard?

TensorBoard é a interface usada para visualizar o gráfico e outras ferramentas para compreender, depurar e otimizar o modelo. É uma ferramenta que fornece medições e visualizações para fluxo de trabalho de aprendizado de máquina. Ajuda a rastrear métricas como perda e precisão, visualização de gráfico de modelo, incorporação de projeto em espaços de dimensões inferiores, etc.

Visualização de gráfico do TensorFlow usando exemplo do Tensorboard

A imagem abaixo vem do gráfico do TensorBoard que você gerará neste tutorial do TensorBoard. É o painel principal:

Visualização do gráfico do TensorFlow
Visualização do gráfico do TensorFlow

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.

Gráficos do TensorBoard

Gráficos do TensorBoard
  • Escalares: Mostra diferentes informações úteis durante o treinamento do modelo
  • Gráficos: Mostrar o modelo
  • Histograma: Exibir pesos com um histograma
  • Distribuição: Exibe a distribuição do peso
  • Projetor: Mostrar análise de componentes principais e algoritmo T-SNE. A técnica usada para redução de dimensionalidade

Durante este tutorial do TensorBoard, você treinará um modelo simples de aprendizado profundo. Você aprenderá como funciona em um tutorial futuro.

Se você olhar o gráfico, poderá entender como o modelo funciona.

  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.

Visualização de gráfico do TensorFlow usando exemplo do Tensorboard

A ideia básica por trás do tensorboard é que a rede neural pode ser algo conhecido como caixa preta e precisamos de uma ferramenta para inspecionar o que está dentro dessa caixa. Você pode imaginar o tensorboard como uma lanterna para começar a mergulhar na rede neural.

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 se ter uma ideia de quão útil o gráfico do TensorBoard pode ser, veja a imagem abaixo:

Gráficos do TensorBoard
Gráfico TensorBoard

Uma rede neural decide como conectar os diferentes “neurônios” e quantas camadas antes que o modelo possa prever um resultado. Depois de definir a arquitetura, você não só precisa treinar o modelo, mas também uma métrica para calcular a precisão da previsão. Essa métrica é chamada de função de perda. O objetivo é minimizar a função de perda. Em outras palavras, significa que o modelo está cometendo menos erros. Todos os algoritmos de aprendizado de máquina repetirão os cálculos muitas vezes até que a perda atinja uma linha mais plana. Para minimizar esta função de perda, você precisa definir um taxa de Aprendizagem. É a velocidade que você deseja que o modelo aprenda. Se você definir uma taxa de aprendizado muito alta, o modelo não terá tempo para aprender nada. Este é o caso da imagem à esquerda. A linha está se movendo para cima e para baixo, o que significa que o modelo prevê o resultado com pura suposição. A imagem à direita mostra que a perda está diminuindo ao longo da iteração até que a curva fique achatada, 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. A rede neural pode levar horas a semanas antes de encontrar uma solução. O TensorBoard atualiza as métricas com muita frequência. Nesse caso, você não precisa esperar até o final para ver se o modelo treina corretamente. Você pode abrir o TensorBoard para verificar como está o treinamento e fazer as alterações apropriadas, se necessário.

Como usar o TensorBoard?

Neste tutorial, você aprenderá como abrir o TensorBoard a partir do terminal para MacOS e da linha de comando TensorBoard para Windows.

O código será explicado em um tutorial futuro, o foco aqui é o TensorBoard.

Primeiro, você precisa importar as bibliotecas que utilizará durante o treinamento

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

Você cria os dados. É uma matriz de 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)

Os códigos abaixo transformam os dados e criam o modelo.

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

Durante a maior parte do Tutoriais do TensorFlow, você usará o estimador TensorFlow. Esta é a API TensorFlow que contém todos os cálculos matemáticos.

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 arquivo python. Dentro desse caminho, o TensorFlow criará uma pasta chamada train com uma pasta filha 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: {'_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 gráfico de visualização do TensorFlow consiste em treinar o 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>

Para usuário MacOS

Tutorial do TensorBoard para usuário MacOS

Para a Windows usuário

Tutorial do TensorBoard para Windows Utilizador

Você pode ver essas informações noPyTorch TensorBoard.

Agora que você escreveu os eventos de log, pode abrir o Tensorboard. Tensorboard Keras é executado na porta 6006 (Jupyter roda na porta 8888). Você pode usar o Terminal para usuários do MacOs ou o prompt do Anaconda para Windows usuário.

Para usuário MacOS

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

O notebook é armazenado no caminho /Users/Guru99/tuto_TF

Para a Windows usuários

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

O notebook é armazenado no caminho C:\Users\Admin\Anaconda3

Para iniciar o Tensorboard, você pode usar este código

Para usuário MacOS

tensorboard --logdir=./train/linreg

Para a Windows usuários

tensorboard --logdir=.\train\linreg

O Tensorboard está localizado neste URL: http://localhost:6006

Também pode estar localizado no seguinte local.

Usar TensorBoard

Copie e cole o URL no seu navegador favorito. Você deveria ver isto:

Observe que aprenderemos como ler o gráfico no tutorial dedicado ao deep learning.

Usar TensorBoard

Se você vir algo assim:

Usar TensorBoard

Isso significa que o Tensorboard não consegue encontrar o arquivo de log. Certifique-se de apontar o CD para o caminho correto ou verifique se o evento de log foi criado. Caso contrário, execute novamente o código.

Se você deseja fechar o TensorBoard, pressione CTRL + C

Dica: Verifique o prompt do anaconda para o diretório de trabalho atual,

Usar TensorBoard

O arquivo de log deve ser criado em C:\Users\Admin

Resumo

TensorBoard é uma ótima ferramenta para visualizar seu modelo. Além disso, muitas métricas são exibidas durante o treinamento, como perda, precisão ou pesos.

Para ativar o Tensorboard, você precisa definir o caminho do seu arquivo:

cd /Users/Guru99/tuto_TF

Ative o ambiente do Tensorflow

activate hello-tf

Iniciar Tensorboard

tensorboard --logdir=.+ PATH