Path: blob/master/site/es-419/tutorials/generative/autoencoder.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Introducción a los autocodificadores
En este tutorial, se presentan los autocodificadores con tres ejemplos: fundamentos, eliminación de ruidos y detección de anomalías.
Un autocodificador es un tipo de red neuronal especial que es entrenado para que copie su propia entrada en la salida. Por ejemplo, si se ingresa una imagen con una cifra escrita a mano, un autocodificador primero codifica la imagen en una representación latente de menor dimensión, luego vuelve a decodificar la representación latente en una imagen. Un autocodificador aprende a comprimir los datos mientras minimiza errores de reconstrucción.
Para obtener más información sobre los autocodificadores, considere leer el capítulo 14 de Aprendizaje profundo de Ian Goodfellow, Yoshua Bengio, y Aaron Courville.
Importar TensorFlow y otras bibliotecas
Cargar el conjunto de datos
Para empezar, entrenará un autocodificador básico con el conjunto de datos MNIST de moda. Cada imagen en el conjunto de datos es de 28x28 píxeles.
Primer ejemplo: autocodificador básico
Defina un autocodificador con dos capas densas: un encoder
, que comprime las imágenes en un vector latente de 64 dimensiones y un decoder
, que reconstruye la imagen original desde el espacio latente.
Para definir su modelo, use la API de subclasificación del modelo de Keras.
Entrene el modelo con x_train
como la entrada y la salida. El encoder
aprenderá a comprimir los conjuntos de datos de 784 dimensiones en el espacio latente, y el decoder
aprenderá a reconstruir las imágenes originales.
Ahora que el modelo está entrenado, probemos la codificación y decodificación de imágenes en el conjunto de prueba.
Segundo ejemplo: eliminación de ruidos de la imagen
También se puede entrenar un autocodificador para eliminar el ruido de las imágenes. En la siguiente sección, creará una versión con ruido del conjunto de datos MNIST de moda y aplicará ruido aleatorio en cada imagen. Luego, entrenará al autocodificador con una imagen con ruido como entrada y la imagen original como el destino.
Importaremos el conjunto de datos para omitir las modificaciones hechas anteriormente.
Agregamos ruido aleatorio a las imágenes.
Trazamos las imágenes con ruido.
Definir un autocodificador convolucional
En este ejemplo, entrenará un autocodificador convolucional con las capas Conv2D en el encoder
, y las capas Conv2DTranspose en el decoder
.
Veamos un resumen del codificador. Note cómo se reduce el tamaño de las imágenes de 28x28 a 7x7.
El decodificador aumenta el tamaño de las imágenes de 7x7 a 28x28.
Se trazan las imágenes con ruido y las imágenes sin ruido generadas por el autocodificador.
Tercer ejemplo: detección de anomalías
Descripción general
En este ejemplo, entrenará un autocodificador para detectar anomalías en el conjunto de datos ECG5000. Este conjunto de datos contiene 5000 electrocardiogramas, cada uno con 140 puntos de datos. Usará una versión simplificada del conjunto de datos, donde cada ejemplo fue etiquetado con el número 0
(que corresponde a un ritmo cardíaco anormal) o con el número 1
(que corresponde a un ritmo cardíaco normal). Lo que se busca es identificar los ritmos anormales.
Nota: Este es un conjunto de datos etiquetados, así que podría formularse como un problema de aprendizaje supervisado. El objetivo de este ejemplo es ilustrar los conceptos de detección de anomalías que pueden aplicarse a conjuntos de datos más grandes, donde no hay etiquetas disponibles (por ejemplo, si tiene miles de ritmos cardíacos normales y solo una pequeña cantidad de ritmos cardíacos anormales).
¿Cómo se detectan las anomalías con el autocodificador? Recuerde que un autocodificador está entrenado para minimizar los errores de la reconstrucción. Entrenará un autocodificador solo con los ritmos cardíacos normales, y lo usará para reconstruir todos los datos. Nuestra hipótesis es que los ritmos cardíacos anormales presentarán más errores de reconstrucción. Luego de esto, usted clasificará un ritmo como anormal si el error de reconstrucción supera un umbral fijo.
Cargar datos ECG
El conjunto de datos que usará se basa en uno de timeseriesclassification.com.
Normalizar los datos en [0,1]
.
Entrenará al autocodificador solo con los ritmos cardíacos normales, que están etiquetados en el conjunto de datos con el número 1
. Separe los ritmos normales de los ritmos anormales.
Trace un ECG normal.
Trace un ECG anormal.
Construir el modelo
Note como el autocodificador está entrenado solo con los ECG normales, pero se evalúa con todo el conjunto de prueba.
Pronto clasificará un ECG como anormal si el error de reconstrucción es mayor a una desviación estándar de los ejemplos de entrenamiento normales. Primero, trazaremos un ECG normal con el conjunto de entrenamiento, la reconstrucción después de que el autocodificador lo codifique y descodifique y el error de reconstrucción.
Cree un trazado similar, pero ahora para un ejemplo de prueba anormal.
Detectar anomalías
Detecte anomalías al calcular si la pérdida de la reconstrucción es mayor al umbral fijo. En este tutorial, calculará el error promedio de la media para los ejemplos normales del conjunto de entrenamiento, luego clasificará los ejemplos futuros como anormales si el error de reconstrucción es mayor que la desviación estándar del conjunto de entrenamiento.
Trace el error de reconstrucción en los ECG normales del conjunto de entrenamiento.
Escoja un valor de umbral que esté una desviación estándar por sobre la media.
Nota: Existen otras estrategias que se pueden usar para seleccionar un valor de umbral que se mencionó anteriormente, que debería clasificar a los ejemplos de prueba en anormales, el enfoque correcto dependerá de su conjunto de datos. Puede obtener más información en los enlaces al final de este tutorial.
SI examina el error de reconstrucción para los ejemplos anormales en el conjunto de prueba, notará que la mayoría tiene un valor de error de reconstrucción más alto que el umbral. Al variar el umbral, puede ajustar la precisión y coincidencia de su clasificador.
Clasifique un ECG como anormal si el valor de error de reconstrucción es mayor que el umbral.
Próximos pasos
Para obtener más información sobre la detección de anomalías con autocodificadores, échele un vistazo a este ejemplo interactivo generado con TensorFlow.js de Victor Dibia. Para ver un caso del mundo real, puede aprender cómo Airbus detecta anomalías en datos de telemetría de ISS con TensorFlow. Para más información sobre los fundamentos, considere esta entrada de blog de François Chollet. Para más detalles, lea el capítulo 14 de Aprendizaje profundo de Ian Goodfellow, Yoshua Bengio, y Aaron Courville.