Sin categoría

Transferir el aprendizaje con Keras – Parte 1

El aprendizaje de transferencia es un tema candente en este momento. Debido al hecho de que arquitecturas como VGG16/19, InceptionV3 y similares se construyen por defecto en marcos como Keras, la aplicación de técnicas de aprendizaje de transferencia (TL) se está volviendo "fácil" para los primeros pasos y ganar cierta intuición sobre un problema.

Elegiré el VGG16 como punto de partida, incluidas las ponderaciones de ImageNet para pre-entrenado. Antes de sumergirse en los detalles necesitamos pasar por alguna teoría para entender dónde sucede la magia.

Red VGG16

Diagrama VGG16

En primer lugar vamos a sumergirse en la arquitectura ConvNet (CNN / red neuronal convolucional) VGG16 propuesto por Karen Simonyan & Andrew Zisserman en su artículo "Redes convolucionales muy profundas para el reconocimiento de imágenes a gran escala".

Voy a hacer referencia a la imagen de arriba para una mejor comprensión ya que resaltar el punto clave que necesitamos. VGG16 está compuesto por 16 capas de convolución mezcladas con la agrupación máxima con una zancada de 2. Esto significa que elegirá el valor máximo de una cuadrícula 2×2. Esto nos lleva de una capa de 224×224 a una 112×112. Conceptualmente, estamos reenviando el valor relevante para la red. Vale la pena mencionar que cada convolución está aplicando una unidad lineal rectificadora (ReLU) como función de activación. Compruebe la implementación de Keras a continuación:

No te asustes si no te suena familiar. Al final del día, VGG16, hasta la capa aplanar (loc. 28), lo que está haciendo es tratar de obtener mos características /partes relevantes de la imagen en un solo píxel 7×7 con una dimensión (canales) hasta 512. Recuerde que la entrada de red era de 224 x 224 con 3 canales como dimensión (RGB). ¿Por qué es relevante? Este primer conjunto de capas no clasifica nada, se puede pensar como un ojo. Las que están perming la clasificación son las últimas capas totalmente conectadas con una salida de 1000. A través de Softmax como activación seríamos capaces de obtener la mayor probabilidad de etiqueta mediante la asignación a las etiquetas de ImageNet. Probablemente, si usted jugó con esto en cualquier momento en el tiempo, usted está recibiendo la intuición para los próximos pasos.

Una cosa más antes de sumergirse en el aprendizaje de transferencia ver el param utilizando el modelo fuera de la caja VGG16 de Keras:

Recuerde que include_top parámetro en el momento de crear el modelo. Llegaremos 😉

Hay una razón por la que include_top es uno de los parámetros. include_top: si se deben incluir las 3 capas totalmente conectadas en la parte superior de la red. Esto significa que vamos a obtener como salida de la capa block5_pool(26) en mi gist. Aquí es donde encontramos la intuición sobre dónde se hace la clasificación real. De hecho, esas 3 capas totalmente conectadas donde el softmax sobre el último, más las 1000 etiquetas del conjunto de datos de imagen, nos traerán el probablemente de x ha sido un objeto.

Una de las cosas buenas de Transfer Learning, o la idea detrás, es precargar las ponderaciones del conjunto de datos ImageNet en el modelo. Si eliminamos las capas superiores y congelamos el resto del modelo, podemos reutilizar la capacidad del resto de la red para centrarnos en las entidades más relevantes de la imagen congelando esas capas y añadiendo nuestra propia red para manejar la nueva característica o simple, una clasificación diferente (hay un montón de ejemplos sobre gatos :D).

Por lo tanto, podemos seguir tres enfoques principales:

  1. Vuelva a entrenar toda la red. En los mismos casos, esto funciona si la naturaleza de las imágenes varía del conjunto de datos ImageNet original (xD 14.197.122 imágenes).
  2. Congele el primer bloque de la red VGG16. En el mismo caso, si tiene un conjunto de datos grande, congele la capa hasta el bloque 56x56x256. El resto de la red será entrenada. Con un pequeño conjunto de datos puede terminar en el montaje de la red. La gran CNN requiere una gran cantidad de datos para ser entrenados correctamente.
  3. Congele hasta la parte superior. El enfoque más utilizado para las pruebas rápidas y empezar a ganar algo de intuición alrededor de las respuestas. Con un dataset decente (5000 imágenes por etiqueta) es posible lograr resultados de +95% con 2 a 3 bloques de capas totalmente conectadas.

En este caso estamos congelando las capas de la red VGG16 y pasando la salida a dos capas totalmente conectadas más la salida (predicciones). Para este caso somos usuarios un descenso de gradiente estocástico con una tasa de aprendizaje estándar.

Para el caso, voy a tratar de utilizar un conjunto de datos corto (500 imágenes por etiqueta). En el siguiente post voy a usar el aumento y Keras ImageGenerator para ampliar el conjunto de datos x10.