
Conocer el aprendizaje automático y la biblioteca TensorFlow es similar a las primeras lecciones en una escuela de manejo, cuando sufres de estacionamiento paralelo, trata de cambiar de marcha en el momento adecuado y no mezclar los espejos, recordando frenéticamente la secuencia de acciones, mientras tu pie tiembla nerviosamente en los pedales de gas. Este es un ejercicio difícil pero necesario. Entonces, en el aprendizaje automático: antes de usar sistemas modernos de reconocimiento facial o algoritmos de pronóstico en el mercado de valores, tendrá que lidiar con las herramientas apropiadas y un conjunto de instrucciones para luego crear sus propios sistemas sin problemas.
Los principiantes en el aprendizaje automático apreciarán la orientación aplicada de este libro, ya que su propósito es presentar los conceptos básicos y luego resolver rápidamente problemas reales. A partir de una revisión de los conceptos de aprendizaje automático y los principios de trabajar con TensorFlow, pasará a algoritmos básicos, estudiará redes neuronales y podrá resolver de forma independiente los problemas de clasificación, agrupación, regresión y pronóstico.
Extracto Redes neuronales convolucionales
Comprar en tiendas después de un día agotador es una tarea muy onerosa. Mis ojos son atacados por demasiada información. Ventas, cupones, una variedad de colores, niños pequeños, luces parpadeantes y pasillos llenos de personas: estos son solo algunos ejemplos de todas las señales que se envían a la corteza visual del cerebro, independientemente de si quiero o no prestarle atención. El sistema visual absorbe una gran cantidad de información.
Seguramente conoces la frase "es mejor ver una vez que escuchar cien veces". Esto puede ser cierto para usted y para mí (es decir, para las personas), pero ¿puede la máquina encontrar significado en las imágenes? Nuestros fotorreceptores visuales seleccionan longitudes de onda de luz, pero esta información, aparentemente, no se extiende a nuestra conciencia. Al final, no puedo decir exactamente qué longitudes de onda de luz estoy observando. Del mismo modo, la cámara recibe píxeles de imagen. Pero, en cambio, queremos recibir algo de un nivel superior, por ejemplo, nombres o posiciones de objetos. ¿Cómo obtenemos información percibida a nivel humano a partir de píxeles?
Para obtener un cierto significado de los datos de origen, será necesario diseñar un modelo de red neuronal. En capítulos anteriores, se introdujeron varios tipos de modelos de redes neuronales, como los modelos completamente conectados (capítulo 8) y los codificadores automáticos (capítulo 7). En este capítulo, presentaremos otro tipo de modelo llamado red neuronal convolucional (CNN). Este modelo funciona muy bien con imágenes y otros datos sensoriales como el sonido. Por ejemplo, el modelo CNN puede clasificar de manera confiable qué objeto se muestra en la imagen.
El modelo CNN, que se discutirá en este capítulo, recibirá capacitación para clasificar las imágenes en una de las 10 categorías posibles. En este caso, "una imagen es mejor que una sola palabra", ya que solo tenemos 10 opciones posibles. Este es un pequeño paso hacia la percepción a nivel humano, pero tenemos que comenzar con algo, ¿verdad?
9.1. Desventajas de las redes neuronales
El aprendizaje automático es una lucha eterna para el desarrollo de un modelo que tenga suficiente expresividad para presentar datos, pero al mismo tiempo no sea tan universal como para volver a entrenar y memorizar patrones. Las redes neuronales se ofrecen como una forma de aumentar la expresividad; aunque, como puede suponer, sufren mucho por las trampas del reciclaje.
NOTA La reentrenamiento ocurre cuando un modelo entrenado es excepcionalmente preciso en un conjunto de datos de entrenamiento y malo en un conjunto de datos de validación. Este modelo es probablemente demasiado universal para la pequeña cantidad de datos disponibles, y al final solo recuerda los datos de entrenamiento.
Para comparar la versatilidad de los dos modelos de aprendizaje automático, puede usar un algoritmo heurístico rápido y tosco para calcular la cantidad de parámetros que deben determinarse como resultado del entrenamiento. Como se muestra en la fig. 9.1, una red neuronal completamente conectada que toma una imagen de 256 × 256 y la mapea en una capa de 10 neuronas tendrá 256 × 256 × 10 = 655,360 parámetros. Compárelo con un modelo que contiene solo cinco parámetros. Se puede suponer que una red neuronal completamente conectada puede presentar datos más complejos que un modelo de cinco parámetros.
La siguiente sección discute las redes neuronales convolucionales, que son una forma razonable de reducir el número de parámetros. En lugar de tratar con redes completamente conectadas, CNN reutiliza los mismos parámetros repetidamente.
9.2. Redes neuronales convolucionales
La idea principal que subyace a las redes neuronales convolucionales es que la comprensión local de la imagen es suficiente. La ventaja práctica de las redes neuronales convolucionales es que, al tener varios parámetros, es posible reducir significativamente el tiempo de entrenamiento, así como la cantidad de datos necesarios para entrenar el modelo.
En lugar de redes completamente conectadas con pesos de cada píxel, CNN tiene un número suficiente de pesos necesarios para ver un pequeño fragmento de la imagen. Es como leer un libro con una lupa: al final, lees toda la página, pero en cualquier momento, solo miras un pequeño fragmento.
Imagine una imagen de 256 × 256. En lugar de usar el código TensorFlow que procesa toda la imagen a la vez, puede escanear el fragmento de imagen por fragmento, por ejemplo, una ventana de 5 × 5. Una ventana de 5 × 5 se desliza sobre la imagen (generalmente de izquierda a derecha y de arriba a abajo), como mostrado en la fig. 9.2. Lo "rápido" que se desliza se llama longitud de zancada. Por ejemplo, una longitud de paso de 2 significa que una ventana deslizante de 5 × 5 se mueve 2 píxeles a la vez hasta que haya pasado toda la imagen. En TensorFlow, como se mostrará pronto, puede ajustar la longitud del paso y el tamaño de la ventana utilizando la biblioteca de funciones incorporada.
Esta ventana 5 × 5 tiene una matriz de peso 5 × 5 asociada.
DEFINICIÓN Una convolución es una suma ponderada de los valores de intensidad de píxeles en una imagen a medida que la ventana pasa a través de toda la imagen. Resulta que este proceso de convolución de la imagen con la matriz de pesos crea otra imagen (del mismo tamaño, que depende del plegado). La coagulación es el proceso de aplicación de convolución.
Todas las manipulaciones de la ventana deslizante se producen en la capa convolucional de la red neuronal. Una red neuronal convolucional típica tiene varias capas convolucionales. Cada capa convolucional generalmente crea muchas convoluciones adicionales, por lo tanto, la matriz de ponderación es un tensor de 5 × 5 × n, donde n es el número de convoluciones.
Como ejemplo, deje que la imagen atraviese una capa convolucional con una matriz de peso de 5 × 5 × 64 dimensiones. Esto crea 64 circunvoluciones con una ventana deslizante de 5 × 5. Por lo tanto, el modelo correspondiente tiene 5 × 5 × 64 = 1600 parámetros, que es significativamente menor que el número de parámetros de una red totalmente conectada : 256 × 256 = 65.536.
El atractivo de las redes neuronales convolucionales (CNN) es que el número de parámetros utilizados por el modelo no depende del tamaño de la imagen original. ¡Puede ejecutar la misma red neuronal convolucional en imágenes de 300 × 300, y el número de parámetros en la capa convolucional no cambiará!
9.3. Preparación de imagen
Antes de comenzar a usar el modelo CNN con TensorFlow, prepare algunas imágenes. Los listados en esta sección lo ayudarán a configurar un conjunto de datos de capacitación para el resto del capítulo.
En primer lugar, descargue el
conjunto de
datos CIFAR-10 de
www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz. Este conjunto contiene 60,000 imágenes distribuidas uniformemente en 10 categorías, que es un recurso bastante grande para tareas de clasificación. Luego, el archivo de imagen debe colocarse en el directorio de trabajo. En la fig. La Figura 9.3 muestra ejemplos de imágenes de este conjunto de datos.
Ya usamos el conjunto de datos CIFAR-10 en el capítulo anterior sobre codificadores automáticos, y ahora mira este código nuevamente. La siguiente lista se toma directamente de la documentación de CIFAR-10 ubicada en
www.cs.toronto.edu/~kriz/cifar.html . Ponga el código en el archivo cifar_tools.py.
Listado 9.1. Cargando imágenes de un archivo CIFAR-10 en Python
import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict
Las redes neuronales son propensas a la reentrenamiento, por lo que es importante hacer todo lo posible para minimizar este error. Para hacer esto, no olvides limpiar los datos antes de procesarlos.
La limpieza de datos es el proceso principal de la tubería de aprendizaje automático. El código en el Listado 9.2 usa los siguientes tres pasos para limpiar un conjunto de imágenes:
1. Si tiene una imagen en color, intente convertirla a tonos de gris para reducir la dimensionalidad de los datos de entrada y, por lo tanto, reducir el número de parámetros.
2. Piense en recortar la imagen en el centro, porque los bordes de la imagen no proporcionan ninguna información útil.
3. Normalice la entrada restando la media y dividiendo por la desviación estándar de cada muestra de datos para que los gradientes no cambien demasiado durante la propagación hacia atrás.
La siguiente lista muestra cómo borrar un conjunto de datos utilizando estos métodos.
Guarde todas las imágenes del conjunto de datos CIFAR-10 y ejecute la función de limpieza. La siguiente lista define un método conveniente para leer, limpiar y estructurar datos para usar en TensorFlow. Allí, debe incluir el código del archivo cifar_tools.py.
Listado 9.3. Preprocesamiento de todos los archivos CIFAR-10
def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels
En el archivo using_cifar.py, puede usar el método importando cifar_tools para esto. Los listados 9.4 y 9.5 muestran cómo obtener múltiples imágenes de un conjunto de datos y visualizarlas.
Listado 9.4. Usando la función auxiliar cifar_tools
import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py')
Puede seleccionar arbitrariamente varias imágenes y dibujarlas de acuerdo con la etiqueta. La siguiente lista hace exactamente eso, para que pueda comprender mejor el tipo de datos con los que estará tratando.
Al ejecutar este código, creará el archivo cifar_examples.png, que se verá como la Fig. 9.3.
»Se puede encontrar más información sobre el libro en
el sitio web del editor»
Contenidos»
ExtractoCupón de 20% de descuento para vendedores ambulantes -
Machine Learning