Introducción a las circunvoluciones usando Python

Las convoluciones son una de las características clave detrás de las redes neuronales convolucionales . Para obtener detalles sobre el funcionamiento de las CNN, consulte Introducción a la red neuronal de convolución .

Feature Learning
Feature Engineering o Feature Extraction es el proceso de extraer patrones útiles de los datos de entrada que ayudarán al modelo de predicción a comprender mejor la naturaleza real del problema. Un buen aprendizaje de características presentará patrones de una manera que aumente significativamente la precisión y el rendimiento de los algoritmos de aprendizaje automático aplicados de una manera que sería imposible o demasiado costosa para el propio aprendizaje automático. Los algoritmos de aprendizaje de características encuentran los patrones comunes que son importantes para distinguir entre las clases deseadas y los extraen automáticamente. Después de este proceso, están listos para ser utilizados en un problema de clasificación o regresión.
Consideremos un problema popular de clasificación de imágenes, clasificación de imágenes de un rostro y un objeto sin rostro. En los primeros días de la visión por computadora, los científicos intentaron resolver el problema codificando a mano los algoritmos de detección de las posibles características de un rostro humano como la forma, los ojos, la nariz, los labios, etc. muchas variedades, que no fue posible dar cuenta ni siquiera de una fracción significativa de las características. Solo un simple cambio en la iluminación o la orientación puede provocar un cambio en una imagen de modo que los algoritmos ya no puedan detectar rostros.
En 1998, Yann Lecunintrodujo el concepto de redes neuronales convolucionales que era capaz de clasificar imágenes de caracteres escritos a mano con una precisión de aproximadamente el 99%. La gran ventaja de las redes neuronales convolucionales es que son excepcionalmente buenas para encontrar características en imágenes que crecen después de cada nivel, lo que al final da como resultado características de alto nivel. Las capas finales (pueden ser una o más) utilizan todas estas características generadas para clasificación o regresión.
Circunvolución
La convolución es una operación que se realiza en una imagen para extraer características de ella aplicando un tensor más pequeño llamado kernel como una ventana deslizante sobre la imagen. Dependiendo de los valores en el kernel convolucional, podemos seleccionar patrones específicos de la imagen. En el siguiente ejemplo, demostraremos la detección de bordes horizontales y verticales en una imagen usando kernels apropiados.

Python3

import numpy as np
import matplotlib.pyplot as plt
  
# let img1 be an image with no features
img1 = np.array([np.array([200, 200]), np.array([200, 200])])
img2 = np.array([np.array([200, 200]), np.array([0, 0])])
img3 = np.array([np.array([200, 0]), np.array([200, 0])])
  
kernel_horizontal = np.array([np.array([2, 2]), np.array([-2, -2])])
print(kernel_horizontal, 'is a kernel for detecting horizontal edges')
  
kernel_vertical = np.array([np.array([2, -2]), np.array([2, -2])])
print(kernel_vertical, 'is a kernel for detecting vertical edges')
  
# We will apply the kernels on the images by
# elementwise multiplication followed by summation
def apply_kernel(img, kernel):
    return np.sum(np.multiply(img, kernel))
  
# Visualizing img1
plt.imshow(img1)
plt.axis('off')
plt.title('img1')
plt.show()
  
# Checking for horizontal and vertical features in image1
print('Horizontal edge confidence score:', apply_kernel(img1, 
                                            kernel_horizontal))
print('Vertical edge confidence score:', apply_kernel(img1, 
                                            kernel_vertical))
  
# Visualizing img2
plt.imshow(img2)
plt.axis('off')
plt.title('img2')
plt.show()
  
# Checking for horizontal and vertical features in image2
print('Horizontal edge confidence score:', apply_kernel(img2, 
                                            kernel_horizontal))
print('Vertical edge confidence score:', apply_kernel(img2, 
                                            kernel_vertical))
  
# Visualizing img3
plt.imshow(img3)
plt.axis('off')
plt.title('img3')
plt.show()
  
# Checking for horizontal and vertical features in image3
print('Horizontal edge confidence score:', apply_kernel(img3, 
                                            kernel_horizontal))
print('Vertical edge confidence score:', apply_kernel(img3, 
                                            kernel_vertical))

Producción:

[ [ 2 2]
[-2 -2] ] es un kernel para detectar bordes horizontales
[ [ 2 -2]
[ 2 -2] ] es un kernel para detectar bordes verticales

Puntaje de confianza del borde horizontal: 0
Puntaje de confianza del borde vertical: 0

Puntuación de confianza del borde horizontal: 800
Puntuación de confianza del borde vertical: 0

Puntuación de confianza del borde horizontal: 0
Puntuación de confianza del borde vertical: 800

Publicación traducida automáticamente

Artículo escrito por geekyRakshit y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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