{"id":134409,"date":"2026-02-19T14:45:16","date_gmt":"2026-02-19T13:45:16","guid":{"rendered":"https:\/\/multi.liora.io\/?p=134409"},"modified":"2026-02-25T12:25:00","modified_gmt":"2026-02-25T11:25:00","slug":"convolutional-neural-network-es","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/convolutional-neural-network-es","title":{"rendered":"Convolutional Neural Network : definici\u00f3n y funcionamiento"},"content":{"rendered":"\n<p><strong>En esta parte, vamos a centrarnos en uno de los algoritmos m\u00e1s eficaces del Deep Learning, las Convolutional Neural Network o CNN: redes neuronales convolucionales, son modelos de programaci\u00f3n potentes que permiten principalmente el reconocimiento de im\u00e1genes atribuyendo autom\u00e1ticamente a cada imagen proporcionada en la entrada, una etiqueta correspondiente a la clase a la que pertenece.<\/strong><\/p>\n\n\n\n<p>Te damos la bienvenida a este tercer episodio de nuestro dossier de Deep Learning. Despu\u00e9s de la introducci\u00f3n al Deep Learning y sus aplicaciones en la primera parte, abordamos ahora la estructura y el funcionamiento de las redes neuronales en esta segunda parte.<\/p>\n\n\n\n<p>\u00a1All\u00e1 vamos!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Machine Learning VS Deep Learning : Quelles diff\u00e9rences ?\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/DazUaVu5MO0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cuales-son-las-principales-aplicaciones-de-las-cnn\">\u00bfCu\u00e1les son las principales aplicaciones de las CNN?<\/h2>\n\n\n\n<p>Una red neuronal convolucional se inspira en la naturaleza, ya que <strong>la conectividad entre las neuronas artificiales se asemeja a la organizaci\u00f3n del c\u00f3rtex visual en los animales<\/strong>. Uno de sus principales casos de uso es <strong>el reconocimiento de im\u00e1genes<\/strong>. Las redes convolucionales aprenden m\u00e1s r\u00e1pido y presentan una menor tasa de error. En menor medida, tambi\u00e9n se utilizan para el an\u00e1lisis de v\u00eddeo. Este tipo de red tambi\u00e9n se emplea en <a href=\"https:\/\/liora.io\/es\/nlp-introduccion\">el procesamiento del lenguaje natural<\/a>. Los modelos CNN son muy eficaces para <strong>el an\u00e1lisis sem\u00e1ntico<\/strong>, <strong>la modelizaci\u00f3n de frases<\/strong>, <strong>la clasificaci\u00f3n<\/strong> o <strong>la traducci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>En comparaci\u00f3n con m\u00e9todos tradicionales como las redes neuronales recurrentes, <strong>las redes convolucionales<\/strong> pueden representar distintos contextos del lenguaje sin depender de una estructura estrictamente secuencial. Las redes convolucionales tambi\u00e9n se han <strong>utilizado en el descubrimiento de f\u00e1rmacos<\/strong>, ya que permiten identificar posibles tratamientos al predecir las interacciones entre mol\u00e9culas y prote\u00ednas biol\u00f3gicas.<\/p>\n\n\n\n<p>Adem\u00e1s, las CNN se han aplicado en <strong>programas de juego como el Go o el ajedrez<\/strong>, donde han demostrado un rendimiento sobresaliente. Otra de sus aplicaciones es la detecci\u00f3n de anomal\u00edas en im\u00e1genes de entrada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-arquitectura-de-una-convolutional-neural-network-cnn\">Arquitectura de una Convolutional Neural Network (CNN)<\/h2>\n\n\n\n<p><i>Las <i>CNN<\/i><\/i> designan una subcategor\u00eda de redes neuronales y hoy en d\u00eda son uno de los <b><i>modelos de clasificaci\u00f3n de im\u00e1genes<\/i> considerados como m\u00e1s eficaces.<\/b><\/p>\n\n\n\n<p>A primera vista, su modo de funcionamiento es sencillo: el usuario proporciona una imagen de entrada en forma de matriz de p\u00edxeles.<\/p>\n\n\n\n<p>Esta dispone de 3 dimensiones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dos dimensiones<\/strong> para una imagen en niveles de gris.<\/li>\n\n\n\n<li>Una tercera dimensi\u00f3n, de profundidad 3 para representar los colores fundamentales (rojo, verde, azul).<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">M\u00e1s informaci\u00f3n sobre las CNN<\/a><\/div>\n<\/div>\n\n\n\n<p>Al contrario que un modelo MLP (Multi Layers Perceptron) cl\u00e1sico que solo contiene una parte de clasificaci\u00f3n, la arquitectura de la Convolutional Neural Network dispone previamente de una parte convolucional y consta por tanto de dos partes bien diferenciadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Un parte convolucional<\/b>: Su objetivo final es <b>extraer caracter\u00edsticas propias de cada imagen<\/b> <b>comprimi\u00e9ndolas<\/b> para <b>reducir su tama\u00f1o inicial<\/b>. En resumen, la imagen proporcionada de entrada pasa a trav\u00e9s de una <b>sucesi\u00f3n de filtros<\/b>, creando a la vez nuevas im\u00e1genes llamadas <b>tarjetas de convoluciones<\/b>. Por \u00faltimo, las <b>tarjetas de convoluciones<\/b> <b>obtenidas se concatenan<\/b> en un vector de caracter\u00edsticas llamado <b>c\u00f3digo CNN<\/b>.<\/li>\n\n\n\n<li>Una <b>parte de clasificaci\u00f3n<\/b>: El <b>c\u00f3digo CNN obtenido en la salida<\/b> de la parte convolucional <b>se suministra como entrada en una segunda parte<\/b>, compuesta de capas totalmente conectadas llamadas perceptr\u00f3n multicapa (MLP o Multi Layers Perceptron). El papel de esta parte es <b>combinar las caracter\u00edsticas del c\u00f3digo CNN para clasificar la imagen<\/b>. Para volver a esta parte, no dudes en consultar el art\u00edculo sobre este tema.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><a href=\"https:\/\/blog.octo.com\/classification-dimages-les-reseaux-de-neurones-convolutifs-en-toute-simplicite\/\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-2.png\" alt=\"convolutional neural network\" style=\"width:819px;height:auto\" \/><\/a><figcaption class=\"wp-element-caption\">Esquema que representa la arquitectura de una CNN<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-parte-convolucional-para-que-sirve-la-convolucion\">Parte convolucional : \u00bfPara qu\u00e9 sirve la convoluci\u00f3n?<\/h2>\n\n\n<h3 class=\"wp-block-heading\" id=\"en-primer-lugar-para-que-sirve-la-convolucion\">En primer lugar, &iquest;para qu&eacute; sirve la convoluci&oacute;n?<\/h3>\n\n\n\n<p>La <strong>convoluci\u00f3n<\/strong> es una operaci\u00f3n matem\u00e1tica sencilla que se suele utilizar para el tratamiento y el <strong>reconocimiento de im\u00e1genes<\/strong>. En una imagen, su efecto se asimila a un filtrado, aqu\u00ed puedes ver su funcionamiento:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><a href=\"https:\/\/www.natural-solutions.eu\/blog\/la-reconnaissance-dimage-avec-les-rseaux-de-neurones-convolutifs#:~:text=Qu'est%2Dce%20que%20la,%C3%A0%20la%20reconnaissance%20d'image.\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-3.png\" alt=\"neural network\" style=\"width:auto;height:400px\" \/><\/a><figcaption class=\"wp-element-caption\">Esquema del recorrido de la ventana del filtro sobre la imagen<\/figcaption><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>En primer lugar, <b>se define el tama\u00f1o de la ventana de filtro<\/b> situada en la parte superior izquierda.<\/li>\n\n\n\n<li>La ventana de filtro, que representa la caracter\u00edstica, <b>se desplaza progresivamente<\/b> de izquierda a derecha un determinado n\u00famero de casillas definido previamente (<b>el paso)<\/b> hasta llegar al final de la imagen.<\/li>\n\n\n\n<li>En cada porci\u00f3n de imagen que encuentra, se efect\u00faa el c\u00e1lculo de convoluci\u00f3n permitiendo obtener en la salida una tarjeta de activaci\u00f3n o feature map que indica d\u00f3nde est\u00e1n localizadas las features en la imagen: cuanto m\u00e1s arriba est\u00e9 la feature, m\u00e1s se parecer\u00e1 a ella la porci\u00f3n de imagen barrida.<\/li>\n<\/ol>\n\n\n<h3 class=\"wp-block-heading\" id=\"ejemplo-de-un-filtro-de-convolucion-clasica\">Ejemplo de un filtro de convoluci&oacute;n cl&aacute;sica<\/h3>\n\n\n\n<p>Durante la parte convolucional de una Convolutional Neural Network, la imagen proporcionada de entrada pasa a trav\u00e9s de una <b>serie de filtros de convoluci\u00f3n<\/b>. Por ejemplo existen filtros de convoluci\u00f3n que se suelen utilizar y que permiten extraer caracter\u00edsticas m\u00e1s pertinentes que p\u00edxeles como la detecci\u00f3n de bordes (<b>filtro derivador<\/b>) o formas geom\u00e9tricas. La elecci\u00f3n y la aplicaci\u00f3n de los filtros la hace de forma <b>autom\u00e1tica<\/b> el modelo.<\/p>\n\n\n\n<p>Entre los filtros m\u00e1s conocidos, encontramos en particular el <b>filtro promediador<\/b> (calcula para cada p\u00edxel la media del p\u00edxel con sus 8 vecinos m\u00e1s cercanos) o incluso el <b>filtro gaussiano<\/b> que permite reducir el ruido de una imagen proporcionada de entrada:<\/p>\n\n\n\n<p>Aqu\u00ed puedes ver un ejemplo de esos dos filtros diferentes en una imagen que incluye un gran ruido (se puede pensar en una fotograf\u00eda tomada con poca luminosidad por ejemplo). Sin embargo, uno de los inconvenientes de la reducci\u00f3n del ruido es que por lo general va acompa\u00f1ada de una reducci\u00f3n de la nitidez:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-4.png\" alt=\"CNN Deep learning\" style=\"width:669px;height:auto\" \/><figcaption class=\"wp-element-caption\">Efecto de los filtros de promedio y gaussiano &#8211; Liora<\/figcaption><\/figure>\n\n\n\n<p>Como se puede observar, al contrario del filtro promediador, el filtro gaussiano reduce el ruido sin reducir significativamente la nitidez.&nbsp;<\/p>\n\n\n\n<p>Adem\u00e1s de su funci\u00f3n de filtrado, el inter\u00e9s de <strong>la parte convolucional de una CNN<\/strong> es que permite <strong>extraer caracter\u00edsticas propias de cada imagen<\/strong> comprimi\u00e9ndolas para reducir su tama\u00f1o inicial, a trav\u00e9s de m\u00e9todos de submuestreo como el Max-Pooling.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">M\u00e1s informaci\u00f3n sobre la convoluci\u00f3n<\/a><\/div>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"metodo-de-submuestreo-el-max-pooling\">M&eacute;todo de submuestreo : el Max-Pooling<\/h3>\n\n\n\n<p>El Max-Pooling es un proceso de discretizaci\u00f3n basado en muestras. Su objetivo es submuestrear una representaci\u00f3n de entrada (imagen, matriz de salida de capa escondida, etc.) reduciendo su tama\u00f1o. Adem\u00e1s, su inter\u00e9s es que reduce el coste de c\u00e1lculo reduciendo el n\u00famero de par\u00e1metros que tiene que aprender y proporciona una invariancia por peque\u00f1as translaciones (si una peque\u00f1a translaci\u00f3n no modifica el m\u00e1ximo de la regi\u00f3n barrida, el m\u00e1ximo de cada regi\u00f3n seguir\u00e1 siendo el mismo y por tanto la nueva matriz creada ser\u00e1 id\u00e9ntica).<\/p>\n\n\n\n<p>Para que la acci\u00f3n del Max-Pooling sea m\u00e1s concreta, aqu\u00ed tienes un ejemplo: imagina que tenemos una matriz de 4\u00d74 que representa nuestra entrada inicial y un filtro de una ventana de 2\u00d72 que aplicaremos en nuestra entrada. Para cada regi\u00f3n barrida por el filtro, el Max-pooling tomar\u00e1 el m\u00e1ximo y de ese modo crear\u00e1 a la vez una nueva matriz de salida en la que cada elemento corresponder\u00e1 a los m\u00e1ximos de cada regi\u00f3n detectada.<\/p>\n\n\n\n<p>Ilustremos el proceso :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><a href=\"https:\/\/cs231n.github.io\/convolutional-networks\/\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-5.png\" alt=\"convolutional neural network\" \/><\/a><figcaption class=\"wp-element-caption\">Procesamiento del Max-Pooling<\/figcaption><\/figure>\n\n\n\n<p>La ventana de filtro se desplaza dos p\u00edxeles hacia la derecha (stride\/paso = 2) y recupera en cada paso \u201cel argmax\u201d que corresponde al valor m\u00e1s alto de los 4 valores de p\u00edxeles.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><a href=\"https:\/\/cs231n.github.io\/convolutional-networks\/\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-6.png\" alt=\"reseau de neurones convolutif\" \/><\/a><figcaption class=\"wp-element-caption\">Exemple d\u2019effet du Max-Pooling<\/figcaption><\/figure>\n\n\n\n<p><b>Se comprende mejor la utilidad de la parte convolucional de una CNN<\/b>: al contrario que un modelo MLP cl\u00e1sico, a\u00f1adir previamente la parte convolucional permite <b>obtener en la salida una \u201ctarjeta de caracter\u00edsticas\u201d o \u201cc\u00f3digo CNN\u201d<\/b> (matriz de p\u00edxeles situada a la derecha en el ejemplo) cuyas <b>dimensiones<\/b> son <b>m\u00e1s peque\u00f1as<\/b> que las de la imagen inicial lo cual va a tener la ventaja de <b>disminuir<\/b> en gran medida el n\u00famero de <b>par\u00e1metros que tiene que calcular el modelo<\/b>.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">Aprende a hacer Max-Pooling<\/a><\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"ejemplo-de-una-arquitectura-cnn-y-su-salida\">Ejemplo de una arquitectura CNN y su salida<\/h2>\n\n\n\n<p>Despu\u00e9s de la parte convolucional de una CNN, viene la parte de clasificaci\u00f3n. Esa parte de clasificaci\u00f3n, com\u00fan para todos los modelos de redes neuronales, corresponde a un modelo de perceptr\u00f3n multicapas (MLP).&nbsp;<\/p>\n\n\n\n<p>Su objetivo es atribuir a cada muestra de datos una etiqueta que describa la clase a la que pertenezca.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><a href=\"https:\/\/www.natural-solutions.eu\/blog\/histoire-du-deep-learning#:~:text=Les%20perceptrons%20multicouches%3A%20MLP%20(1986)&amp;text=Les%20perceptrons%20multicouches%20ont%20pour,mieux%20cette%20base%20de%20donn%C3%A9es.\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-7.png\" alt=\"reseau de neurones\" style=\"width:auto;height:400px\" \/><\/a><figcaption class=\"wp-element-caption\">Representaci\u00f3n de un perceptr\u00f3n multicapas<\/figcaption><\/figure>\n\n\n\n<p>El algoritmo que utilizan los perceptrones para actualizar sus pesos (o coeficientes de redes) se llama la <b>retropropagaci\u00f3n del gradiente del error<\/b>, famoso algoritmo de descenso de gradiente que veremos m\u00e1s en detalle despu\u00e9s.&nbsp;&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><a href=\"http:\/\/dspace.univ-tlemcen.dz\/bitstream\/112\/12235\/1\/Classification-des-images-avec-les-reseaux-de-neurones.pdf\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-8.png\" alt=\"reseau de neurones\" style=\"width:auto;height:200px\" \/><\/a><figcaption class=\"wp-element-caption\">Ejemplo de arquitectura de una CNN<\/figcaption><\/figure>\n\n\n\n<p>Por lo general, la <b>arquitectura de una Convolutional Neural Network<\/b> es pr\u00e1cticamente igual:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Capa de convoluci\u00f3n (CONV)<\/b>: El papel de esta primera capa es <b>analizar las im\u00e1genes proporcionadas en la entrada<\/b> y <b>detectar la presencia de un conjunto de features<\/b>. A la salida de esa capa se obtiene un conjunto de features maps (<i>ver m\u00e1s arriba: \u00bfpara qu\u00e9 sirve la convoluci\u00f3n?<\/i>).<\/li>\n\n\n\n<li><b>Capa de Pooling (POOL)<\/b>: La capa de Pooling es una operaci\u00f3n que por lo general se aplica entre dos capas de convoluci\u00f3n. Esta recibe en la entrada las features maps formadas en la salida de la capa de convoluci\u00f3n y su papel es<b> reducir el tama\u00f1o de las im\u00e1genes y, a la vez, preservar sus caracter\u00edsticas m\u00e1s esenciales<\/b>. Entre las m\u00e1s utilizadas, encontramos el <b>Max-pooling<\/b> mencionado m\u00e1s arriba o incluso el <b>Average pooling<\/b> cuyo manejo consiste en conservar en cada paso, el valor medio de la ventana de filtro.<\/li>\n<\/ul>\n\n\n\n<p>Finalmente, se obtiene en la salida de esa capa de Pooling el mismo n\u00famero de feature maps que en la salida, pero considerablemente comprimidas.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>La capa de activaci\u00f3n ReLU (Rectified Linear Units)<\/b>: Esa capa <b>sustituye todos los valores negativos recibidos en la entrada por ceros<\/b>. El inter\u00e9s de esas capas de activaci\u00f3n es hacer que el modelo sea no lineal y por tanto, m\u00e1s complejo.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2025\/12\/cnn-9.png\" alt=\"\" style=\"width:auto;height:400px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Capa Fully Connected (FC)<\/b>: Estas capas se colocan al final de la arquitectura de la CNN y <b>se conectan por completo a todas las neuronas de salida<\/b> (de ah\u00ed el t\u00e9rmino fully-connected). Despu\u00e9s de haber recibido un vector en la entrada, la capa FC aplica sucesivamente una <b>combinaci\u00f3n lineal<\/b> y una <b>funci\u00f3n de activaci\u00f3n<\/b> con la finalidad de <b>clasificar el input imagen<\/b> (<i>ver el siguiente esquema<\/i>). Finalmente en la salida devuelve un <b>vector de tama\u00f1o correspondiente al n\u00famero de clases<\/b> en el que cada componente representa la probabilidad de que el input imagen pertenezca a una clase.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-10.png\" alt=\"couche fully connected\" style=\"width:auto;height:400px\" \/><figcaption class=\"wp-element-caption\">Funcionamiento de una red neuronal con 2 capas escondidas<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">Aprende a crear arquitecturas CNN<\/a><\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"implementacion-de-una-cnn-preentrenada-en-python\">Implementaci&oacute;n de una CNN preentrenada en Python :<\/h2>\n\n\n\n<p>Para usos pr\u00e1cticos y considerando la complejidad de creaci\u00f3n de las <b>eficaces<\/b> CNN \u201chechas a mano\u201d, vamos a utilizar las redes preentrenadas disponibles en el m\u00f3dulo <a href=\"https:\/\/pytorch.org\/docs\/stable\/torchvision\/index.html\">Torchvision<\/a>. Veamos c\u00f3mo se puede implementar en Python:<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"aplicacion-de-una-cnn-identificacion-de-imagenes-genericas-a-partir-del-dataset-imagenet-diez-millones-de-imagenes-etiquetadas\">Aplicaci&oacute;n de una CNN : Identificaci&oacute;n de im&aacute;genes gen&eacute;ricas a partir del dataset ImageNet: diez millones de im&aacute;genes etiquetadas<\/h2>\n\n\n\n<p>ImageNet es una base de datos de m\u00e1s de diez millones de im\u00e1genes etiquetadas creada por la organizaci\u00f3n del mismo nombre, y destinada a trabajos de investigaci\u00f3n de visi\u00f3n por computador.<\/p>\n\n\n\n<p>Aqu\u00ed tienes un extracto de ese voluminoso dataset:<\/p>\n\n\n\n<p><b>Etapa 0 <\/b>: Primero, importamos todas las bibliotecas que ser\u00e1n necesarias para los siguientes pasos<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>from keras.preprocessing.image import load_img\nfrom keras.preprocessing.image import img_to_array\nfrom keras.applications.vgg16 import preprocess_input\nfrom keras.applications.vgg16 import decode_predictions\nfrom keras.applications.vgg16 import VGG16<\/code><\/pre>\n\n\n\n<p><b>Etapa 1 <\/b>: Entrenamiento del modelo preentrenado VGG16<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>model = VGG16()<\/code><\/pre>\n\n\n\n<p><b>Etapa 2 <\/b>: Importaci\u00f3n de las 3 im\u00e1genes que hay que predecir<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code># Importation des 3 images suivantes : avion de guerre de type reaper, loup, ballon de football.\nimg1 = load_img('reaper.jpeg', target_size=(224, 224))\nimg2 = load_img('loup.jpeg', target_size=(224, 224))\nimg3 = load_img('ballon.jpg', target_size=(224, 224))<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1728ffff wp-block-columns-is-layout-flex\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-12.png\" alt=\"\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-13.png\" alt=\"\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"640\" height=\"427\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora.jpg\" alt=\"\" class=\"wp-image-184187\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora.jpg 640w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora-300x200.jpg 300w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora-435x290.jpg 435w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora-440x294.jpg 440w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora-210x140.jpg 210w, https:\/\/liora.io\/app\/uploads\/sites\/7\/2026\/02\/ballon-liora-96x64.jpg 96w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p><b>Etapa 3 <\/b>: Pretratamiento de las im\u00e1genes<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code># Conversion image (matrice de pixels) en un numpy array\ndef preprocess(image) :\n    image = img_to_array(image)\n\n    # Redimensionnage \n    image = image.reshape((1, image.shape&#091;0], image.shape&#091;1], image.shape&#091;2]))\n\n    # Preprocessing\n    image = preprocess_input(image)\n    \n    return image<\/code><\/pre>\n\n\n\n<p><b>Etapa 4 <\/b>: Predicci\u00f3n del modelo<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>def pred_modele(image) :\n    \n    image = preprocess(image)\n    # Pr\u00e9diction\n    y_pred = model.predict(image)\n\n    # Conversion des probabilit\u00e9s en classe label\n    label = decode_predictions(y_pred)\n    \n    # Affectation du label ayant la plus grande probabilit\u00e9\n    label = label&#091;0]&#091;0]\n\n \n    return ((label&#091;1], label&#091;2]*100))\n\nimg=&#091;img1,img2,img3]\n\nfor i in range(3) :\n    print(\"Pr\u00e9diction image\",i+1,\":\",pred_modele (img&#091;i])&#091;0], 'avec une probabilit\u00e9 de',round(pred_modele (img&#091;i])&#091;1],2),'%')<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2025\/12\/cnn.png\" alt=\"\" \/><figcaption class=\"wp-element-caption\">Visualizaci\u00f3n de las predicciones del modelo VGG16<\/figcaption><\/figure>\n\n\n\n<p>Tambi\u00e9n se pueden visualizar las 5 etiquetas que VGG16 estime como m\u00e1s probables :<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>import pandas as pd\n\nimg = load_img('\/Users\/Bedoucha\/Desktop\/loup.jpeg', target_size=(224, 224))\nimg = preprocess(img)\n\n# Pr\u00e9diction\ny_pred = model.predict(img)\n\n# Cr\u00e9ation d'un DataFrame avec les 5 labels les plus probables\nlabel_5_plus_probable = decode_predictions(y_pred)\n\nl=&#091;]\nm=&#091;]\nfor i in range(5) :\n    l.append(label_5_plus_probable&#091;0]&#091;i]&#091;1])\n    m.append(round(label_5_plus_probable&#091;0]&#091;i]&#091;2]*100,2))\n    \ndf_5_plus_probable=pd.DataFrame({'Etiquette': l, 'Probabilit\u00e9 (%)' : m},index = list(range(1,6)))\ndf_5_plus_probable<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2020\/06\/CNN-15-.png\" alt=\"prediction algorithme\" style=\"width:auto;height:300px\" \/><figcaption class=\"wp-element-caption\">Top 5 de las etiquetas consideradas m\u00e1s probables por VGG16<\/figcaption><\/figure>\n\n\n\n<p><b>\u2192 Por tanto VGG16 ha conseguido predecir con gran confianza (95,6&nbsp;%) no solo que la imagen proporcionada en la entrada era un lobo, sino que ha ido un paso m\u00e1s all\u00e1 y ha precisado su raza, es decir un lobo gris del Este (timber wolf). Impresionante, \u00bfno?<\/b><\/p>\n\n\n\n<p>Por \u00faltimo, el principio de funcionamiento de una CNN es bastante f\u00e1cil de comprender, pero parad\u00f3jicamente, la implementaci\u00f3n de un procedimiento como este para clasificar im\u00e1genes sigue siendo muy complejo debido al n\u00famero considerable de par\u00e1metros que hay que definir: n\u00famero, tama\u00f1o, desplazamiento de filtros, elecci\u00f3n del m\u00e9todo de pooling, elecci\u00f3n del n\u00famero de capas neuronales, n\u00famero de neuronas por capas, etc.&nbsp;<\/p>\n\n\n\n<p>Para paliar ese obst\u00e1culo, Python ofrece, a trav\u00e9s del m\u00f3dulo de Torchvision, la posibilidad de explotar modelos de CNN preentrenados eficaces como VGG16, Resnet101, etc.<\/p>\n\n\n\n<p>En este art\u00edculo hemos definido el <b>funcionamiento<\/b> y la <b>arquitectura<\/b> <b>de las Convolutional Neural Network<\/b>, centr\u00e1ndonos en su especificidad: la parte convolucional.&nbsp;<\/p>\n\n\n\n<p>Todav\u00eda nos queda por descubrir una etapa de la clasificaci\u00f3n: la retropropagaci\u00f3n del gradiente del error, famoso algoritmo de descenso de gradiente. No te preocupes, pronto podr\u00e1s leer el pr\u00f3ximo cap\u00edtulo sobre el tema en <a href=\"https:\/\/liora.io\/es\/blog\">nuestro blog<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">Descubrir nuestras formaciones<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfCu\u00e1les son las principales aplicaciones de las CNN?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Las CNN (redes neuronales convolucionales) se inspiran en el c\u00f3rtex visual animal. Principales aplicaciones: reconocimiento de im\u00e1genes (aprenden r\u00e1pido, baja tasa error), an\u00e1lisis de v\u00eddeo, procesamiento del lenguaje natural (an\u00e1lisis sem\u00e1ntico, modelizaci\u00f3n frases, clasificaci\u00f3n, traducci\u00f3n), descubrimiento de f\u00e1rmacos (predicci\u00f3n interacciones mol\u00e9cula-prote\u00edna), programas de juego (Go, ajedrez), detecci\u00f3n de anomal\u00edas en im\u00e1genes.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Arquitectura de una Convolutional Neural Network (CNN)\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Una CNN tiene dos partes: 1) Parte convolucional: extrae caracter\u00edsticas de la imagen de entrada (matriz 3D: 2D para grises, profundidad 3 para colores RGB) mediante filtros sucesivos, creando tarjetas de convoluciones que se concatenan en un vector 'c\u00f3digo CNN'. 2) Parte de clasificaci\u00f3n (MLP): combina caracter\u00edsticas del c\u00f3digo CNN para clasificar la imagen.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Parte convolucional : \u00bfPara qu\u00e9 sirve la convoluci\u00f3n?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"La convoluci\u00f3n es una operaci\u00f3n matem\u00e1tica de filtrado de im\u00e1genes: una ventana de filtro (tama\u00f1o definido) se desplaza sobre la imagen (de izquierda a derecha con paso fijo) calculando en cada porci\u00f3n una tarjeta de activaci\u00f3n (feature map) que indica d\u00f3nde est\u00e1n localizadas las caracter\u00edsticas. La CNN aprende autom\u00e1ticamente los filtros (ej. detecci\u00f3n de bordes con filtro derivador, formas geom\u00e9tricas). Filtros conocidos: promediador (media con 8 vecinos), gaussiano (reduce ruido sin perder nitidez).\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Ejemplo de una arquitectura CNN y su salida\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Arquitectura t\u00edpica: Capa convoluci\u00f3n (CONV) \u2013 analiza im\u00e1genes, detecta features, produce feature maps. Capa Pooling (POOL) \u2013 reduce tama\u00f1o preservando caracter\u00edsticas (Max-pooling toma m\u00e1ximo por regi\u00f3n, Average-pooling toma media). Capa activaci\u00f3n ReLU \u2013 sustituye valores negativos por cero (aporta no linealidad). Capa Fully Connected (FC) \u2013 al final, conectada a todas neuronas de salida, aplica combinaci\u00f3n lineal + activaci\u00f3n para clasificar; devuelve vector con probabilidades por clase.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Implementaci\u00f3n de una CNN preentrenada en Python :\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Usando Torchvision\/Keras: importar VGG16 preentrenado, cargar im\u00e1genes (redimensionar a 224\u00d7224), preprocesar (convertir a array numpy, reshape, preprocess_input), predecir con model.predict(), decodificar probabilidades a etiquetas con decode_predictions. VGG16 puede identificar razas espec\u00edficas (ej. lobo gris del Este con 95,6% confianza). Python ofrece modelos preentrenados (VGG16, Resnet101) para evitar la complejidad de definir manualmente numerosos par\u00e1metros.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>En esta parte, vamos a centrarnos en uno de los algoritmos m\u00e1s eficaces del Deep Learning, las Convolutional Neural Network o CNN: redes neuronales convolucionales, son modelos de programaci\u00f3n potentes que permiten principalmente el reconocimiento de im\u00e1genes atribuyendo autom\u00e1ticamente a cada imagen proporcionada en la entrada, una etiqueta correspondiente a la clase a la que [&hellip;]<\/p>\n","protected":false},"author":82,"featured_media":183750,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2440],"class_list":["post-134409","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ia"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/134409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=134409"}],"version-history":[{"count":5,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/134409\/revisions"}],"predecessor-version":[{"id":184196,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/134409\/revisions\/184196"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/183750"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=134409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=134409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}