Path: blob/master/site/pt-br/tutorials/generative/autoencoder.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Introdução aos autoencoders
Este tutorial apresenta os autoencoders com três exemplos: os básicos, a remoção de ruído de imagem e a detecção de anomalias.
O autoencoder é um tipo especial de rede neural, treinada para copiar sua entrada para a saída. Por exemplo, dada a imagem de um dígito escrito à mão, um autoencoder primeiro codifica a imagem em uma representação latente de menor dimensão, depois decodifica a representação latente em uma imagem. O autoencoder aprende a comprimir os dados ao mesmo tempo em que minimiza o erro de reconstrução.
Para saber mais sobre autoencoders, você pode ler o capítulo 14 do livro Deep Learning (Aprendizado profundo, em tradução livre), escrito por Ian Goodfellow, Yoshua Bengio e Aaron Courville.
Importar o TensorFlow e outras bibliotecas
Carregar o dataset
Para começar, você treinará o autoencoder básico usando o dataset Fashion MNIST. Cada imagem desse dataset tem 28x28 pixels.
Primeiro exemplo: autoencoder básico
Defina um autoencoder com duas camadas Dense: um encoder
, que comprime as imagens em um vetor latente de 64 dimensões, e um decoder
, que reconstrói a imagem original a partir do espaço latente.
Para definir o modelo, use a API de subclasses do modelo do Keras.
Treine o modelo usando x_train
como a entrada e o alvo. O encoder
aprenderá a comprimir o dataset de 784 dimensões para o espaço latente, e o decoder
aprenderá a reconstruir as imagens originais.
Agora que o modelo está treinado, vamos testá-lo fazendo a codificação e a decodificação de imagens do conjunto de teste.
Segundo exemplo: remoção de ruído de imagem
Um autoencoder também pode ser treinado para remover ruído das imagens. Na próxima seção, você criará uma versão do dataset Fashion MNIST com ruído aplicando ruído aleatório a cada imagem. Depois, você treinará um autoencoder usando a imagem com ruído como entrada e a imagem original como alvo.
Vamos importar o dataset novamente para omitir as modificações feitas anteriormente.
Adição de ruído aleatório às imagens
Plote as imagens com ruído.
Definir um autoencoder convolucional
Neste exemplo, você treinará um autoencoder convolucional usando camadas Conv2D no encoder
e camadas Conv2DTranspose no decoder
.
Vamos conferir o resumo do encoder. Observe como as imagens são reduzidas de 28x28 para 7x7 pixels.
O decoder amplia as imagens de 7x7 para 28x28 pixels.
Vamos plotar tanto as imagens com ruído quanto as imagens sem ruído produzidas pelo autoencoder.
Terceiro exemplo: detecção de anomalias
Visão geral
Neste exemplo, você treinará um autoencoder para detectar anomalias no dataset ECG5000. Este dataset contém 5.000 eletrocardiogramas, cada um com 140 pontos de dados. Você usará uma versão simplificada do dataset, em que cada exemplo foi rotulado como 0
(correspondente a um ritmo cardíaco anormal) ou 1
(correspondente a um ritmo cardíaco normal). O seu interesse é identificar os ritmos anormais.
Observação: este é um dataset rotulado, então podemos dizer que é um exemplo de aprendizado supervisionado. O objeto deste exemplo é ilustrar os conceitos de detecção de anomalias que você pode aplicar a datasets maiores, quando não tiver rótulos disponíveis (por exemplo, se você tivesse milhares de ritmos normais e somente um pequeno número de ritmos anormais).
Como detectar anomalias usando um autoencoder? Lembre-se de que o autoencoder é treinado para minimizar erros de reconstrução. Você treinará um autoencoder usando somente os ritmos normais e depois o utilizará para reconstruir todos os dados. Nossa hipótese é que os ritmos anormais terão um erro de reconstrução maior. Em seguida, você classificará um ritmo como uma anomalia se o erro de reconstrução ultrapassar um limite estabelecido.
Carregar os dados de eletrocardiogramas
O dataset que você usará é baseado no de timeseriesclassification.com.
Normalize os dados como [0,1]
.
Você treinará o autoencoder usando somente os ritmos normais, que são rotulados como 1
neste dataset. Separe os ritmos normais dos anormais.
Plote um eletrocardiograma normal.
Plote um eletrocardiograma anômalo.
Criação do modelo
O autoencoder é treinado usando-se somente os eletrocardiogramas normais, mas é avaliado usando-se o conjunto de teste completo.
Em breve, você classificará um eletrocardiograma como anômalo se o erro de reconstrução for maior do que um desvio padrão dos exemplos de treinamento normais. Primeiro, vamos plotar um eletrocardiograma normal do conjunto de treinamento, a reconstrução após a codificação e decodificação pelo autoencoder e o erro de reconstrução.
Crie um gráfico similar, desta vez para um exemplo de teste anômalo.
Detecção de anomalias
Detecte anomalias calculando se a perda de reconstrução é maior do que um limite estabelecido. Neste tutorial, você calculará o erro médio para exemplos normais do conjunto de treinamento, depois classificará exemplos futuros como anômalos se o erro de reconstrução for maior do que um desvio padrão do conjunto de treinamento.
Plotar o erro de reconstrução em eletrocardiogramas normais do conjunto de treinamento
Escolha um valor de limite que seja um desvio padrão acima da média.
Observação: existem outras estratégias para selecionar um valor de limite acima do qual os exemplos do teste devem ser classificados como anômalos. A estratégia mais adequada dependerá do dataset. Confira os links no final deste tutorial para saber mais.
Classifique um eletrocardiograma como uma anomalia se o erro de reconstrução for maior do que o limite.
Próximos passos
Para saber mais sobre a detecção de anomalias com autoencoders, confira este excelente exemplo interativo criado com o TensorFlow.js por Victor Dibia. Para um caso de uso real, veja como a Airbus detecta anomalias nos dados de telemetria da ISS usando o TensorFlow. Para saber mais sobre as noções básicas, leia esta postagem de blog de François Chollet. Se quiser saber mais detalhes, confira o capítulo 14 do livro Deep Learning (Aprendizado profundo, em tradução livre), escrito por Ian Goodfellow, Yoshua Bengio e Aaron Courville.