Introducción a las circunvoluciones usando Python

| | | | | | | | | | | | | | | | | | | | | | |

Funciones de aprendizaje
Desarrollo de capacidades o Extracción de funciones — es el proceso de extraer patrones útiles de los datos de entrada lo que ayudará al modelo de pronóstico a comprender mejor la naturaleza real del problema. Una buena función de aprendizaje expondrá patrones de una manera que mejore drásticamente la precisión y el rendimiento de los algoritmos de aprendizaje automático aplicados, lo que sería imposible o demasiado costoso para el aprendizaje automático en sí. Los algoritmos de aprendizaje de funciones encuentran patrones comunes que son importantes para distinguir entre las clases requeridas y los extraen automáticamente. Después de este proceso, están listos para usar en problemas de clasificación o regresión.
Echemos un vistazo al popular problema de clasificación de imágenes, clasificación de imágenes de rostros y rostros sin rostro. En los primeros días de la visión por computadora, los científicos intentaron resolver este problema codificando a mano algoritmos para detectar posibles características de un rostro humano, como la forma, los ojos, la nariz, los labios, etc. como tantas variedades. que era imposible explicar incluso una parte significativa de los signos. Un simple cambio en la iluminación o la orientación puede cambiar la imagen de tal manera que los algoritmos ya no puedan reconocer rostros.
En 1998, Yang Lecun introdujo el concepto de redes neuronales convolucionales, que es capaz de clasificar imágenes de caracteres escritos a mano con una precisión de alrededor del 99 %. La gran ventaja de las redes neuronales convolucionales es que son extraordinariamente buenas para detectar características en imágenes que crecen después de cada nivel, lo que da como resultado características de alto nivel. Las capas finales (pueden ser una o más) usan todas estas características generadas para clasificación o regresión.
convolución
convolución — es una operación que se realiza sobre una imagen para extraer elementos de ella, aplicando un tensor más pequeño, llamado kernel, como una ventana deslizante sobre la imagen. Dependiendo de los valores ‚Äã‚Äãen el núcleo convolucional, podemos recoger ciertos patrones de la imagen. En el siguiente ejemplo, demostraremos cómo detectar bordes horizontales y verticales en una imagen usando los kernels apropiados.

python3

< br>

importar numpy como np

importar matplotlib.pyplot as plt


# dejar que img1 sea una imagen sin complicaciones

img1 = np. array ([np.array ([ 200 , 200 ]), np.array ([ 200 , 200 ])])

img2 = np.array ([np.array ( [ 200 , 200 ]), np.array ([ 0 < /código> , 0 ])])

img3 = np.array ([np.array ([ 200 , 0 ]), np.matriz ([ 200 , 0 ])])

kernel_horizontal = np .matriz ([np.array ([ 2 , 2 ]), np.array ([ - 2 , - 2 < /código> ])])

imprimir (kernel_horizontal, `es un kernel para detectar bordes horizontales` )

kernel_vertical = np.array ([np.array ([ 2 , - 2 ]), np.array ([ 2 , - 2 ])])

print (kernel_vertical , `es un kernel para detectar bordes verticales` )


# Aplicaremos núcleos a las imágenes
# multiplicación por elementos seguida de suma

< clase de código ="palabra clave"> def apply_kernel (img, kernel):

retorno np. suma (np.multiply (img, kernel))


< clase de código = "comentarios"> # Representación de Img1
plt.imshow (img1)

plt.axis ( `off` )

plt.title ( ` img1` )

plt.show ()


# Comprobación de objetos horizontales y verticales en image1

print ( `Confianza de borde horizontal puntuación:` , apply_kernel (img1,

kernel_horizontal))

imprimir ( `Puntuación de confianza del borde vertical:` , apply_kernel (img1 ,

kernel_vertical))


# Representación de Img2
plt.imshow (img2)

plt.axis ( `off` )

plt.title ( `img2` )

plt.show ()


# Comprobación de objetos horizontales y verticales en image2

print ( `Puntuación de confianza del borde horizontal:` , apply_kernel (img2,

kernel_horizontal ))

print ( `Puntuación de confianza del borde vertical:` , apply_kernel (img2,

kernel_vertical))


# Representación de Img3
plt.imshow (img3)

plt.axis ( `off` < /código> )

plt.title ( ` img3 ` )

plt.show()

< br> # Comprobación de objetos horizontales y verticales en la imagen3

print ( `Puntuación de confianza del borde horizontal:` , apply_kernel (img3,

kernel_horizontal))

print ( `Puntuación de confianza del borde vertical:` , apply_kernel (img3,

kernel_vertical))


Salir:

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

Puntuación de confianza del borde horizontal: 0
Puntuación 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