Ver no TensorFlow.org | Executar no Google Colab | Ver fonte no GitHub | Baixar caderno |
Visão geral
Painel Gráficos de TensorBoard é uma ferramenta poderosa para analisar o seu modelo TensorFlow. Você pode visualizar rapidamente um gráfico conceitual da estrutura do seu modelo e garantir que corresponda ao design pretendido. Você também pode visualizar um gráfico de nível operacional para entender como o TensorFlow entende seu programa. Examinar o gráfico de nível operacional pode dar uma ideia de como alterar seu modelo. Por exemplo, você pode redesenhar seu modelo se o treinamento estiver progredindo mais lentamente do que o esperado.
Este tutorial apresenta uma visão geral rápida de como gerar dados de diagnóstico de gráfico e visualizá-los no painel de gráficos do TensorBoard. Você definirá e treinará um modelo sequencial Keras simples para o conjunto de dados Fashion-MNIST e aprenderá como registrar e examinar seus gráficos de modelo. Você também vai usar uma API rastreamento para gerar dados do gráfico para funções criadas usando o novo tf.function
anotação.
Configurar
# Load the TensorBoard notebook extension.
%load_ext tensorboard
from datetime import datetime
from packaging import version
import tensorflow as tf
from tensorflow import keras
print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
"This notebook requires TensorFlow 2.0 or above."
TensorFlow version: 2.2.0
import tensorboard
tensorboard.__version__
'2.2.1'
# Clear any logs from previous runs
rm -rf ./logs/
Defina um modelo Keras
Neste exemplo, o classificador é um modelo sequencial simples de quatro camadas.
# Define the model.
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
Baixe e prepare os dados de treinamento.
(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0
Treine o modelo e registre os dados
Antes do treino, definir o retorno de chamada Keras TensorBoard , especificando o diretório de log. Ao passar esse retorno de chamada para Model.fit (), você garante que os dados do gráfico sejam registrados para visualização no TensorBoard.
# Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)
# Train the model.
model.fit(
train_images,
train_labels,
batch_size=64,
epochs=5,
callbacks=[tensorboard_callback])
Epoch 1/5 938/938 [==============================] - 2s 2ms/step - loss: 0.6955 - accuracy: 0.7618 Epoch 2/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4877 - accuracy: 0.8296 Epoch 3/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4458 - accuracy: 0.8414 Epoch 4/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4246 - accuracy: 0.8476 Epoch 5/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4117 - accuracy: 0.8508 <tensorflow.python.keras.callbacks.History at 0x7f656ecc3fd0>
Gráfico de nível operacional
Inicie o TensorBoard e aguarde alguns segundos para a IU carregar. Selecione o painel de gráficos tocando em “Gráficos” na parte superior.
%tensorboard --logdir logs
Você também pode usar o TensorBoard.dev para criar um experimento hospedado e compartilhável.
!tensorboard dev upload \
--logdir logs \
--name "Sample op-level graph" \
--one_shot
Por padrão, TensorBoard exibe o gráfico de nível op. (À esquerda, você pode ver a tag “Padrão” selecionada.) Observe que o gráfico está invertido; os dados fluem de baixo para cima, portanto, estão de cabeça para baixo em comparação com o código. No entanto, você pode ver que o gráfico corresponde à definição do modelo Keras, com arestas extras para outros nós de computação.
Os gráficos costumam ser muito grandes, então você pode manipular a visualização do gráfico:
- Vá até zoom in e out
- Arraste para pan
- Clicando duas vezes alterna expansão nó (um nó pode ser um recipiente para outros nós)
Você também pode ver os metadados clicando em um nó. Isso permite que você veja entradas, saídas, formas e outros detalhes.
Gráfico conceitual
Além do gráfico de execução, TensorBoard também exibe um gráfico conceitual. Esta é uma visão apenas do modelo Keras. Isso pode ser útil se você estiver reutilizando um modelo salvo e quiser examinar ou validar sua estrutura.
Para ver o gráfico conceitual, selecione a tag “keras”. Para este exemplo, você verá um nó Sequential entrou em colapso. Clique duas vezes no nó para ver a estrutura do modelo:
Gráficos de tf.functions
Os exemplos até agora descreveram gráficos de modelos Keras, onde os gráficos foram criados definindo camadas Keras e chamando Model.fit ().
Você pode encontrar uma situação onde você precisa usar o tf.function
anotação para "autógrafo" , ou seja, transformar uma função computação Python em um gráfico TensorFlow de alto desempenho. Para estas situações, você usa TensorFlow API Resumo rastreamento para registrar funções autografadas para visualização em TensorBoard.
Para usar a API de rastreamento de resumo:
- Definir e anotar uma função com
tf.function
- Use
tf.summary.trace_on()
imediatamente antes de seu site chamada de função. - Adicionar informações de perfil (memória, tempo de CPU) para gráfico, passando
profiler=True
- Com um escritor arquivo Summary, chamada
tf.summary.trace_export()
para salvar os dados de log
Você pode então usar o TensorBoard para ver como sua função se comporta.
# The function to be traced.
@tf.function
def my_func(x, y):
# A simple hand-rolled layer.
return tf.nn.relu(tf.matmul(x, y))
# Set up logging.
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = 'logs/func/%s' % stamp
writer = tf.summary.create_file_writer(logdir)
# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))
# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
tf.summary.trace_export(
name="my_func_trace",
step=0,
profiler_outdir=logdir)
%tensorboard --logdir logs/func
Agora você pode ver a estrutura da sua função conforme entendida pelo TensorBoard. Clique no botão de opção "Perfil" para ver as estatísticas da CPU e da memória.