Path: blob/master/site/pt-br/tensorboard/scalars_and_keras.ipynb
25115 views
Copyright 2019 The TensorFlow Authors.
Escalares do TensorBoard: registro de métricas de treinamento no Keras
Visão geral
O aprendizado de máquina sempre envolve a compreensão sobre métricas fundamentais, como a perda, e como elas mudam ao longo do treinamento. Essas métricas podem ajudar você a entender, por exemplo, se está com overfitting ou treinando desnecessariamente por muito tempo. Você deve comparar essas métricas em diferentes execuções de treinamento para depurar e melhorar seu modelo.
O Painel de Controle Time Series (Série temporal) permite que você visualize essas métricas usando uma API simples com muito pouco esforço. Este tutorial apresenta exemplos bastante básicos para você aprender a usar essas APIs com o TensorBoard ao desenvolver seu modelo do Keras. Você aprenderá a usar a callback do TensorBoard para o Keras e as APIs Summary do TensorFlow para visualizar escalares padrão e personalizados.
Configuração
Configure os dados para uma regressão simples
Agora, você usará o Keras para calcular uma regressão, ou seja, encontrar a linha mais adequada para um dataset emparelhado. (Enquanto o uso das redes neurais e do método do gradiente descendente é excessivo para esse tipo de problema, é um exemplo de fácil compreensão.)
Você usará o TensorBoard para observar como a perda do treinamento e do teste muda nas épocas. Com sorte, você verá a perda do treinamento e do teste diminuir ao longo do tempo e depois permanecer estável.
Primeiro, gere 1000 pontos de dados perto da linha y = 0.5x + 2. Divida esses pontos de dados em datasets de treinamento e teste. Sua esperança é que a rede neural aprenda essa relação.
Treinamento do modelo e registro da perda
Agora, você está pronto para definir, treinar e avaliar seu modelo.
Para registrar o escalar de perda ao treinar, faça o seguinte:
Crie a callback do TensorBoard para o Keras
Especifique um diretório de log
Passe a callback do TensorBoard ao Model.fit() do Keras.
O TensorBoard lê os dados de log na hierarquia de diretório de logs. Nesse notebook, o diretório de log raiz é logs/scalars
, com um subdiretório que inclui carimbo de data/hora como sufixo. Esse subdiretório permite identificar e selecionar execuções de treinamento conforme você usa o TensorBoard e itera seu modelo.
Análise da perda usando o TensorBoard
Agora, inicialize o TensorBoard, especificando o diretório de log raiz que você usou acima.
Aguarde alguns segundos para a interface do usuário do TensorBoard inicializar.
Talvez você veja a mensagem "No dashboards are active for the current data set" (Nenhum painel de controle ativo para o dataset atual) no TensorBoard. Isso ocorre porque o registro de dados inicial ainda não foi salvo. Com o avanço do treinamento, o modelo Keras começará a registrar os dados. O TensorBoard atualizará periodicamente e mostrará suas métricas escalares. Se você estiver impaciente, toque na seta "Refresh" (Atualizar) no canto superior direito.
Ao observar o avanço do treinamento, note que ambas as perdas de treinamento e de validação diminuem rapidamente e depois permanecem estáveis. Na verdade, você poderia ter parado o treinamento após 25 épocas, porque ele não melhorou muito depois desse ponto.
Passe o cursor sobre o grafo para ver pontos de dados específicos. Você também pode tentar aumentar o zoom com o mouse ou selecionar parte deles para ver mais detalhes.
Observe o seletor "Runs" à esquerda. Uma "run", ou execução, representa um conjunto de logs de uma rodada de treinamento, nesse caso, o resultado de Model.fit(). Os desenvolvedores geralmente realizam muitas e muitas execuções, enquanto testam e desenvolvem o modelo ao longo do tempo.
Use o seletor "Runs" para escolher execuções específicas ou somente de treinamento/validação. A comparação de execuções ajudará você a avaliar qual versão do seu código soluciona melhor seu problema.
O grafo de perda do TensorBoard demonstra que a perda diminuiu consistentemente para ambos o treinamento e a validação e depois estabilizou. Isso significa que as métricas do modelo são provavelmente muito boas! Agora veja como o modelo realmente se comporta na vida real.
Com os dados de entrada (60, 25, 2), a linha y = 0.5x + 2 deve gerar (32, 14.5, 3). O modelo está de acordo?
Nada mal!
Registro de escalares personalizados
E se você quiser registrar valores personalizados, como uma taxa de aprendizado dinâmica? Para fazer isso, você precisa usar a API Summary do TensorFlow.
Treine novamente o modelo de regressão e registre uma taxa de aprendizado personalizada. Veja como:
Crie um escritor de arquivo, usando
tf.summary.create_file_writer()
.Defina uma função de taxa de aprendizado personalizada. Ela será passada à callback LearningRateScheduler do Keras.
Dentro da função de taxa de aprendizado, use
tf.summary.scalar()
para registrar a taxa de aprendizado personalizada.Passe a callback LearningRateScheduler a Model.fit().
Em geral, para registrar um escalar personalizado, você precisa usar tf.summary.scalar()
com um escritor de arquivo. O escritor de arquivo é responsável por escrever os dados para essa execução no diretório especificado e é usado de maneira implícita ao utilizar o tf.summary.scalar()
.
Vamos conferir o TensorBoard novamente.
Usando o seletor "Runs" à esquerda, observe que você tem uma execução <timestamp>/metrics
. Ao selecionar essa execução, aparece um grafo "taxa de aprendizado" que permite verificar a progressão da taxa de aprendizado durante a execução.
Você também pode comparar as curvas de perda de treinamento e validação dessa execução com as execuções anteriores. Além disso, talvez você perceba que o cronograma da taxa de aprendizado retornou valores discretos, dependendo da época, mas a plotagem da taxa de aprendizado parece suave. O TensorBoard tem um parâmetro de suavização que você pode precisar definir como zero para ver valores não suavizados.
Como é o desempenho desse modelo?
Registro no nível do lote
Primeiro, vamos carregar o dataset MNIST, normalizar os dados e escrever uma função que cria um modelo simples do Keras para classificar imagens em 10 classes.
Registro instantâneo no nível do lote
O registro instantâneo de métricas no nível do lote pode nos mostrar o nível de oscilação entre lotes ao treinar cada época, o que pode ser útil para depuração.
Configure um escritor de resumo para um diretório de log diferente:
Para ativar o registro no nível do lote, métricas tf.summary
personalizadas devem ser definidas ao sobrepor train_step()
na definição de classe do modelo e envolvidas em um contexto de escritor de resumo. Isso pode ser simplesmente combinado nas definições de modelo de subclasse ou ampliado para editar o modelo de API funcional anterior, conforme mostrado abaixo:
Defina a callback do TensorBoard para registrar métricas no nível da época e do lote no diretório de log e chamar model.fit()
com o batch_size
selecionado:
Abra o TensorBoard com o novo diretório de log e veja ambas as métricas no nível da época e do lote:
Registro cumulativo no nível do lote
O registro no nível do lote também pode ser implementado de maneira cumulativa, calculando a média das métricas de cada lote com a de lotes anteriores e resultando em uma curva de treinamento mais suave ao registrar métricas no nível do lote.
Configure um escritor de resumo para um diretório de log diferente:
Crie métricas stateful que podem ser registradas por lote:
Como antes, adicione métricas tf.summary
personalizadas no método train_step
sobreposto. Para tornar o registro no nível do lote cumulativo, use as métricas stateful que definimos para calcular o resultado cumulativo a partir dos dados de cada passo do treinamento.
Como antes, defina nossa callback do TensorBoard e chame model.fit()
com nosso batch_size
selecionado:
Abra o TensorBoard com o novo diretório de log e veja ambas as métricas no nível da época e do lote:
É isso! Agora você sabe como criar métricas de treinamento personalizadas no TensorBoard para uma ampla variedade de casos de uso.