
El aprendizaje profundo es un conjunto de algoritmos de aprendizaje automático que modelan abstracciones de alto nivel en datos utilizando arquitecturas que consisten en muchas transformaciones no lineales. De acuerdo, esta frase suena amenazante. Pero todo no da tanto miedo si Francois Schollay, quien creó Keras, la biblioteca más poderosa para trabajar con redes neuronales, habla sobre el aprendizaje profundo. Experimente el aprendizaje profundo con ejemplos prácticos de una amplia variedad de áreas. El libro está dividido en dos partes, la primera tiene fundamentos teóricos y la segunda está dedicada a resolver problemas específicos. Esto le permitirá no solo comprender los conceptos básicos de DL, sino también aprender a utilizar nuevas oportunidades en la práctica. Este libro está escrito para personas con experiencia en programación en R que desean familiarizarse rápidamente con el aprendizaje profundo en la práctica, y es un arreglo del libro más vendido de Francois Scholl, "Aprendizaje profundo en Python", pero que utiliza ejemplos basados en la interfaz R para Keras.
Acerca de este libro
El libro "Aprendizaje profundo en R" está dirigido a estadísticos, analistas, ingenieros y estudiantes que tienen habilidades de programación en R, pero que no tienen un conocimiento significativo en el campo de la máquina y el aprendizaje profundo. Este libro es una versión revisada de un libro anterior,
Deep Learning in Python , que contiene ejemplos que utilizan la interfaz R para Keras. El propósito de este libro es proporcionar a la comunidad R una guía que contenga todo lo que necesita, desde la teoría básica hasta las aplicaciones prácticas avanzadas. Verá más de 30 ejemplos de código de programa con comentarios detallados, recomendaciones prácticas y explicaciones simples y generalizadas de todo lo que necesita saber para utilizar el aprendizaje profundo para resolver problemas específicos.
Los ejemplos utilizan el marco de aprendizaje profundo de Keras y la biblioteca TensorFlow como mecanismo interno. Keras es uno de los marcos de aprendizaje profundo más populares y de más rápido crecimiento. A menudo se recomienda como la herramienta más exitosa para que los principiantes aprendan el aprendizaje profundo. Después de leer este libro, comprenderá qué es el aprendizaje profundo, para resolver en qué problemas puede estar involucrada esta tecnología y qué limitaciones tiene. Aprenderá sobre el proceso estándar de interpretación y resolución de problemas de aprendizaje automático y cómo lidiar con problemas comunes. Aprenderá a usar Keras para resolver problemas prácticos desde el reconocimiento de patrones hasta el procesamiento del lenguaje natural: clasificación de imágenes, predicción de secuencias de tiempo, análisis de emociones y generación de imágenes y textos, y mucho más.
Extracto 5.4.1. Visualización de activación intermedia
La visualización de activaciones intermedias consiste en mostrar mapas de características que se muestran por diferentes niveles convolucionales y de combinación en la red en respuesta a ciertos datos de entrada (salida del nivel, el resultado de la función de activación, a menudo llamada su activación). Esta técnica le permite ver cómo los datos de entrada se descomponen en varios filtros recibidos por la red en el proceso de aprendizaje. Por lo general, los mapas de características con tres dimensiones se utilizan para la visualización: ancho, alto y profundidad (canales de color). Los canales codifican características relativamente independientes, por lo tanto, para visualizar estos mapas de características, es preferible construir imágenes bidimensionales para cada canal por separado. Comenzamos cargando el modelo almacenado en la sección 5.2:
> library(keras) > model <- load_model_hdf5("cats_and_dogs_small_2.h5") > model________________________________________________________________ Layer (type) Output Shape Param # ============================================================== conv2d_5 (Conv2D) (None, 148, 148, 32) 896 ________________________________________________________________ maxpooling2d_5 (MaxPooling2D) (None, 74, 74, 32) 0 ________________________________________________________________ conv2d_6 (Conv2D) (None, 72, 72, 64) 18496 ________________________________________________________________ maxpooling2d_6 (MaxPooling2D) (None, 36, 36, 64) 0 ________________________________________________________________ conv2d_7 (Conv2D) (None, 34, 34, 128) 73856 ________________________________________________________________ maxpooling2d_7 (MaxPooling2D) (None, 17, 17, 128) 0 ________________________________________________________________ conv2d_8 (Conv2D) (None, 15, 15, 128) 147584 ________________________________________________________________ maxpooling2d_8 (MaxPooling2D) (None, 7, 7, 128) 0 ________________________________________________________________ flatten_2 (Flatten) (None, 6272) 0 ________________________________________________________________ dropout_1 (Dropout) (None, 6272) 0 ________________________________________________________________ dense_3 (Dense) (None, 512) 3211776 ________________________________________________________________ dense_4 (Dense) (None, 1) 513 ================================================================ Total params: 3,453,121 Trainable params: 3,453,121 Non-trainable params: 0
Luego, seleccione una imagen de entrada de un gato que no sea parte del conjunto de entrenamiento.
Listado 5.25. Prueba de visualización de imagen
plot(as.raster(img_tensor[1,,,]))
Para extraer los mapas de características que se visualizarán, cree un modelo Keras que acepte paquetes de imágenes y muestre la activación de todos los niveles convolucionales y combinados. Para hacer esto, usamos la función keras_model del marco de Keras, que toma dos argumentos: el tensor de entrada (o la lista de tensores de entrada) y el tensor de salida (o la lista de tensores de salida). El resultado será un objeto modelo Keras similar a los modelos devueltos por la función keras_sequential_model () con la que ya está familiarizado; Este modelo asigna la entrada dada a la salida dada. Modelos de funciones
Este tipo es la capacidad de crear modelos con múltiples salidas (a diferencia de keras_sequential_model ()). La función keras_model se trata con más detalle en la sección 7.1.
Si pasa una imagen a este modelo, devolverá los valores de activación de capa en el modelo original. Este es el primer ejemplo de un modelo con varias salidas en este libro: hasta ahora, todos los modelos presentados anteriormente tienen exactamente una entrada y una salida. En general, un modelo puede tener cualquier cantidad de entradas y salidas. En particular, este modelo tiene una entrada y ocho salidas: una para cada activación de nivel.
Tomemos, por ejemplo, la activación de la primera capa convolucional para la imagen de entrada de un gato:
> first_layer_activation <- activations[[1]] > dim(first_layer_activation) [1] 1 148 148 32
Este es un mapa de características de 148 × 148 con 32 canales. Tratemos de mostrar algunos de ellos. Primero, definimos una función para visualizar el canal.
Listado 5.28. Función de visualización de canales
plot_channel <- function(channel) { rotate <- function(x) t(apply(x, 2, rev)) image(rotate(channel), axes = FALSE, asp = 1, col = terrain.colors(12)) }
Ahora mostraremos el segundo canal de activación del primer nivel del modelo original (Fig. 5.18). Este canal parece representar un detector de bucle.
Listado 5.29. Visualización del canal 2
plot_channel(first_layer_activation[1,,,2])
Ahora echemos un vistazo al séptimo canal (Fig. 5.19), pero tenga en cuenta que sus canales pueden ser diferentes, porque aprender filtros específicos no es una operación determinista. Este canal es un poco diferente y parece que resalta el iris del gato.
Listado 5.30. Visualización del canal 7
plot_channel(first_layer_activation[1,,,7])
Ahora crearemos una visualización completa de todas las activaciones en la red (Listado 5.31). Para hacer esto, extraiga y muestre cada canal en los ocho mapas de activación, colocando los resultados en un tensor más grande con imágenes (fig. 5.20-5.23).
Listado 5.31. Visualización de todos los canales para todas las activaciones intermedias.
image_size <- 58 images_per_row <- 16 for (i in 1:8) { layer_activation <- activations[[i]] layer_name <- model$layers[[i]]$name n_features <- dim(layer_activation)[[4]] n_cols <- n_features %/% images_per_row png(paste0("cat_activations_", i, "_", layer_name, ".png"), width = image_size * images_per_row, height = image_size * n_cols) op <- par(mfrow = c(n_cols, images_per_row), mai = rep_len(0.02, 4)) for (col in 0:(n_cols-1)) { for (row in 0:(images_per_row-1)) { channel_image <- layer_activation[1,,,(col*images_per_row) + row + 1] plot_channel(channel_image) } } par(op) dev.off() }
Aquí hay algunos comentarios sobre los resultados.
- La primera capa actúa como una colección de diferentes detectores de bucle. En esta etapa, la activación guarda casi toda la información disponible en la imagen original.
- A medida que avanza por las capas de activación, se vuelven más abstractas y su interpretación visual se vuelve más compleja. Comienzan a codificar conceptos de alto nivel como "oreja de gato" u "ojo de gato". Las representaciones de alto nivel contienen cada vez menos información sobre la imagen original y cada vez más sobre la clase de la imagen.
- La escasez de activaciones aumenta con la profundidad de la capa: en la primera capa, todos los filtros son activados por la imagen original, pero en las capas posteriores hay cada vez más filtros vacíos. Esto significa que el patrón que coincide con el filtro no se encuentra en la imagen original.
Acabamos de examinar una importante característica universal de las representaciones creadas por redes neuronales profundas: las características extraídas por capas se vuelven más abstractas con la profundidad de la capa. Las activaciones en las capas superiores contienen cada vez menos información sobre una imagen de entrada particular, y cada vez más sobre el objetivo (en este caso, la clase de imagen es un gato o un perro). Una red neuronal profunda en realidad actúa como una tubería para la información de limpieza, que recibe datos sin procesar (en este caso, imágenes en formato RGB) y sufre múltiples transformaciones, filtrando información innecesaria (por ejemplo, la apariencia específica de la imagen) y dejando y limpiando la correcta (por ejemplo, una clase imágenes).
Aproximadamente de la misma manera, las personas y los animales perciben el mundo que los rodea: después de observar la escena durante varios segundos, una persona recuerda qué objetos abstractos están presentes en ella (una bicicleta, un árbol), pero no recuerda todos los detalles de la apariencia de estos objetos. De hecho, cuando intentas dibujar una bicicleta de memoria, lo más probable es que no puedas obtener una imagen más o menos correcta, aunque puedas ver las bicicletas miles de veces (ver ejemplos en la figura 5.24). Intenta hacerlo ahora y estarás convencido de la verdad de lo que se ha dicho. Su cerebro ha aprendido a abstraer completamente la imagen visible recibida en la entrada y convertirla en conceptos visuales de alto nivel, al tiempo que filtra detalles visuales sin importancia, lo que hace difícil recordarlos.
»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 -
Deep Learning with R