in

Red neuronal convolucional

1z7hd8FZeI eodazwIapvAw

Red neuronal convolucional

Aprenda la red neuronal convolucional desde lo básico y su implementación en Keras

dshahid380

24 de febrero de 2019·9 min de lectura

1*z7hd8FZeI eodazwIapvAw
  • ¿Qué es CNN?
  • ¿Por qué deberíamos usar CNN?
  • Pocas definiciones
  • Capas en CNN
  • Implementación de Keras

1. ¿Qué es CNN?

La visión por computadora está evolucionando rápidamente día a día. Su una de las razones es el aprendizaje profundo. Cuando hablamos de visión por computadora, nos viene a la mente un término red neuronal convolucional (abreviado como CNN) porque CNN se usa mucho aquí. Ejemplos de CNN en visión por computadora son reconocimiento facial, clasificación de imágenes, etc. Es similar a la red neuronal básica. CNN también tiene parámetros que se pueden aprender como redes neuronales, es decir, pesos, sesgos, etc.

2. ¿Por qué deberíamos usar CNN?

Suponga que está trabajando con MnorteConjunto de datos IST, usted sabe que cada imagen en MNIST es 28 x 28 x 1 (la imagen en blanco y negro contiene solo 1 canal). El número total de neuronas en la capa de entrada será 28 x 28 = 784, esto puede ser manejable. ¿Qué pasa si el tamaño de la imagen es 1000 x 1000, lo que significa que necesita 10⁶ neuronas en la capa de entrada? ¡Oh! Esto parece que se requiere una gran cantidad de neuronas para su funcionamiento. Es un derecho computacionalmente ineficaz. Entonces aquí viene Convolutional Neural Network o CNN. En pocas palabras, lo que hace la CNN es extraer la característica de la imagen y convertirla en una dimensión inferior sin perder sus características. En el siguiente ejemplo, puede ver que el tamaño inicial de la imagen es 224 x 224 x 3. Si continúa sin convolución, entonces necesita 224 x 224 x 3 = 100, 352 números de neuronas en la capa de entrada, pero después de aplicar la convolución, ingresa La dimensión del tensor se reduce a 1 x 1 x 1000. Significa que solo necesita 1000 neuronas en la primera capa de la red neuronal de alimentación.

1*V6hPq srR86AIWYrgFYLfA

Fig. Submuestreo

3. Pocas definiciones

Hay pocas definiciones que debes conocer antes de entender CNN

Pensando en imágenes, es fácil entender que tiene un alto y un ancho, por lo que tendría sentido representar la información que contiene con una estructura bidimensional (una matriz) hasta recordar que las imágenes tienen colores, y agregar información sobre los colores, necesitamos otra dimensión, y es entonces cuando los tensores se vuelven particularmente útiles.

Las imágenes se codifican en canales de color, los datos de la imagen se representan en cada intensidad de color en un canal de color en un punto dado, el más común es RGB, que significa rojo, azul y verde. La información contenida en una imagen es la intensidad del color de cada canal en el ancho y alto de la imagen, así

1*125JKUHmij9bzKcREpq9ew

Fig. Representación RGB de una imagen

Entonces, la intensidad del canal rojo en cada punto con ancho y alto se puede representar en una matriz, lo mismo ocurre con los canales azul y verde, por lo que terminamos teniendo tres matrices, y cuando se combinan forman un tensor.

Cada imagen tiene bordes verticales y horizontales que en realidad se combinan para formar una imagen. La operación de convolución se utiliza con algunos filtros para detectar bordes. Suponga que tiene una imagen en escala de grises con dimensión 6 x 6 y un filtro de dimensión 3 x 3 (digamos). Cuando la imagen en escala de grises de 6 x 6 convoluciona con un filtro de 3 x 3, obtenemos una imagen de 4 x 4. En primer lugar, la matriz de filtro de 3 x 3 se multiplica por el primer tamaño de 3 x 3 de nuestra imagen de escala de grises, luego cambiamos una columna hasta el final, después cambiamos una fila y así sucesivamente.

1*Ekm4QJ1rHE bJbQllBWLPA

Operación de convolución

La operación de convolución se puede visualizar de la siguiente manera. Aquí la dimensión de nuestra imagen es 4 x 4 y el filtro es 3 x 3, por lo tanto, estamos obteniendo una salida después de que la convolución sea 2 x 2.

Visualización de convolución

Si tenemos un tamaño de imagen N x N y un tamaño de filtro F x F, luego de la convolución el resultado será

(N x N) * (F x F) = (N-F+1)x(N-F+1)(Apply this for above case)

Stride denota cuántos pasos estamos moviendo en cada paso de la convolución, por defecto es uno.

Convolución con Stride 1

Podemos observar que el tamaño de la salida es menor que la entrada. Para mantener la dimensión de la salida como en la entrada, usamos relleno. El relleno es un proceso de agregar ceros a la matriz de entrada de forma simétrica. En el siguiente ejemplo, los bloques grises adicionales denotan el acolchado. Se utiliza para hacer que la dimensión de salida sea la misma que la de entrada.

1*17TNPi4m0pBqOCGrXzU27w

Stride 1 con acolchado 1

Digamos que ‘p’ es el relleno

Inicialmente (sin relleno)

(N x N) * (F x F) = (N-F+1)x(N-F+1)---(1)

Después de aplicar relleno

1*8VwvmOay k 0MLTrwqQtEg

Después de aplicar relleno

Si aplicamos el filtro F x F en la matriz de entrada (N + 2p) x (N + 2p) con relleno, obtendremos la dimensión de la matriz de salida (N + 2p-F + 1) x (N + 2p-F + 1) . Como sabemos, después de aplicar el relleno obtendremos la misma dimensión que la dimensión de entrada original (N x N). Por lo tanto tenemos,

(N+2p-F+1)x(N+2p-F+1) equivalent to NxN
N+2p-F+1 = N ---(2)
p = (F-1)/2 ---(3)

La ecuación (3) muestra claramente que el relleno depende de la dimensión del filtro.

4. Capas en CNN

Hay cinco capas diferentes en CNN

  • Capa de entrada
  • Capa Convo (Convo + ReLU)
  • Capa de agrupación
  • Capa completamente conectada (FC)
  • Softmax / capa logística
  • Capa de salida

Diferentes capas de CNN

La capa de entrada en CNN debe contener datos de imagen. Los datos de la imagen están representados por una matriz tridimensional como vimos anteriormente. Necesita remodelarlo en una sola columna. Suponga que tiene una imagen de dimensión 28 x 28 = 784, necesita convertirla a 784 x 1 antes de introducirla en la entrada. Si tiene “m” ejemplos de entrenamiento, la dimensión de entrada será (784, m).

La capa Convo a veces se denomina capa extractora de características porque las características de la imagen se extraen dentro de esta capa. En primer lugar, una parte de la imagen se conecta a la capa Convo para realizar la operación de convolución como vimos anteriormente y calcular el producto escalar entre el campo receptivo (es una región local de la imagen de entrada que tiene el mismo tamaño que la del filtro) y el filtro. El resultado de la operación es un entero único del volumen de salida. Luego deslizamos el filtro sobre el siguiente campo receptivo de la misma imagen de entrada mediante un Stride y hacemos la misma operación nuevamente. Repetiremos el mismo proceso una y otra vez hasta recorrer toda la imagen. La salida será la entrada para la siguiente capa.

La capa Convo también contiene la activación de ReLU para hacer que todos los valores negativos sean cero.

1*GksqN5XY8HPpIddm5wzm7A

Fuente: Red neuronal convolucional CS231n

La capa de agrupación se utiliza para reducir el volumen espacial de la imagen de entrada después de la convolución. Se utiliza entre dos capas de convolución. Si aplicamos FC después de la capa Convo sin aplicar agrupación o agrupación máxima, será computacionalmente costoso y no lo queremos. Por lo tanto, la agrupación máxima es la única forma de reducir el volumen espacial de la imagen de entrada. En el ejemplo anterior, hemos aplicado la agrupación máxima en un solo corte de profundidad con Stride de 2. Puede observar que la entrada de dimensión de 4 x 4 se reduce a una dimensión de 2 x 2.

No hay ningún parámetro en la capa de agrupación, pero tiene dos hiperparámetros: Filtro (F) y Stride (S).

En general, si tenemos una dimensión de entrada W1 x H1 x D1, entonces

W2 = (W1 − F) / S + 1

H2 = (H1 − F) / S + 1

D2 = D1

Donde W2, H2 y D2 son el ancho, alto y profundidad de salida.

La capa completamente conectada involucra pesos, sesgos y neuronas. Conecta neuronas en una capa con neuronas en otra capa. Se utiliza para clasificar imágenes entre diferentes categorías por entrenamiento.

La capa Softmax o Logistic es la última capa de CNN. Reside al final de la capa FC. La logística se usa para la clasificación binaria y softmax es para la clasificación múltiple.

La capa de salida contiene la etiqueta que tiene la forma de codificación one-hot.

Ahora tiene un buen conocimiento de CNN. Implementemos una CNN en Keras.

5. Implementación de Keras

Usaremos el conjunto de datos CIFAR-10 para construir un clasificador de imágenes CNN. El conjunto de datos CIFAR-10 tiene 10 etiquetas diferentes

  • Avión
  • Automóvil
  • Pájaro
  • Gato
  • Ciervo
  • Perro
  • Rana
  • Caballo
  • Barco
  • Camión

Tiene 50.000 datos de entrenamiento y 10.000 datos de imágenes de prueba. El tamaño de la imagen en CIFAR-10 es 32 x 32 x 3. Viene con la biblioteca Keras.

1* p1DwmIPQU gAiB197PBMQ

Fig. Visualización del modelo

Si está utilizando Google colaboratory, asegúrese de estar utilizando GPU. Para comprobar si su GPU está encendida o no. Intente seguir el código.

Producción:

Found GPU at: /device:GPU:0

En primer lugar, importe todos los módulos y bibliotecas necesarios.

Luego, cargue el conjunto de datos y divídalo en conjuntos de prueba y de tren.

Imprimiremos la forma de la muestra de entrenamiento, la forma de la muestra de prueba y el número total de clases presentes en CIFAR-10. Hay 10 clases como vimos anteriormente. Por ejemplo, imprimiremos dos imágenes de ejemplo del conjunto de entrenamiento y del conjunto de prueba.

Producción:

1*Ll4rMotiPgs14 ubaPMiDA

Encuentre la forma de la imagen de entrada y luego modifíquela en el formato de entrada para los conjuntos de entrenamiento y prueba. Después de eso, cambie todos los tipos de datos a flotantes.

Normalice los datos entre 0 y 1 dividiendo los datos del tren y los datos de prueba con 255 y luego convierta todas las etiquetas en un vector caliente con to_catagorical () función.

Muestre el cambio para la etiqueta de categoría usando codificación one-hot.

Producción:

Original label 0 :  [6]
After conversion to categorical ( one-hot ) :
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]

Ahora crea nuestro modelo. Agregaremos capas de Convo seguidas de capas agrupadas. Luego conectaremos la capa Densa (FC) para predecir las clases. Los datos de entrada alimentados a la primera capa Convo, la salida de esa capa Convo actúa como entrada para la siguiente capa Convo y así sucesivamente. Finalmente, los datos se envían a la capa FC que intenta predecir las etiquetas correctas.

Inicialice todos los parámetros y compile nuestro modelo con rmsprops optimizer. Hay muchos optimizadores, por ejemplo adam, SGD, GradientDescent, Adagrad, Adadelta y Adamax, no dude en experimentar con ellos. Aquí el lote es 256 con 50 épocas.

Resumen Modelo() se utiliza para ver todos los parámetros y formas en cada capa en nuestros modelos. Puede observar que los parámetros totales son 276, 138 y los parámetros entrenables totales son 276, 138. El parámetro no entrenable es 0.

Producción:

Resumen Modelo

Después de compilar nuestro modelo, entrenaremos nuestro modelo por encajar() método, luego evalúelo.

Producción:

1*W92nauZaGJyvScsou4N IA

Después del entrenamiento, obtuvimos un 83,86% de precisión y un 75,48% de precisión de validación. En realidad, no está nada mal.

1*wm4Q77KFHqlFNNJDPfs3Jg

Gráfico de pérdidas vs épocas

Gráfico de precisión vs épocas

Conclusión:

¡Felicidades! Ha creado una red neuronal convolucional en Keras al comprender sus conceptos básicos. Siéntase libre de experimentar con él cambiando sus hiperparámetros y hágamelo saber en la sección de comentarios.

Puedes encontrar todo el código en mi Github

  1. Red neuronal convolucional CS231n
  2. Documentación de Keras
  3. Laboratorio de aprendizaje profundo
  4. curso deeplearning.ai sobre redes neuronales convolucionales

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Gv5L6ZU6s5jeqCEtjHGq3Y 1200 80

El mejor Fitbit 2021: todos los últimos Fitbits probados

social og oci logo 1200x628

Capa gratuita de oracleCloud | Oráculo