En este tutorial vamos a aprender cómo crear una Red Neuronal Convolucional (CNN) en PyTorch. Las CNN son un tipo de red neuronal que se utiliza comúnmente para tareas de visión por computadora, como reconocimiento de imágenes, detección de objetos, y segmentación de imágenes. PyTorch es un popular framework de aprendizaje profundo que nos permite construir y entrenar modelos de forma eficiente.
En esta primera parte del tutorial, nos enfocaremos en los conceptos básicos de las CNN y cómo implementar una en PyTorch.
¿Qué es una Red Neuronal Convolucional (CNN)?
Una Red Neuronal Convolucional es un tipo de red neuronal que está especialmente diseñada para procesar datos en forma de imágenes. Las CNN se componen de varias capas diferentes, incluyendo capas de convolución, capas de agrupación (pooling) y capas completamente conectadas.
Las capas de convolución son responsables de extraer características de la imagen de entrada, como bordes, texturas y formas. Las capas de agrupación se utilizan para reducir el tamaño de la representación de las características extraídas, lo que ayuda a reducir el número de parámetros en la red y a prevenir el sobreajuste. Las capas completamente conectadas se utilizan al final de la red para clasificar las características extraídas en diferentes categorías.
Implementación de una CNN en PyTorch
En PyTorch, podemos crear una CNN utilizando la clase nn.Module. La clase nn.Module nos permite definir nuestra red neuronal como un conjunto de capas y operaciones, y también nos proporciona métodos útiles para entrenar y evaluar nuestro modelo.
Primero, necesitamos importar las bibliotecas necesarias:
import torch
import torch.nn as nn
Luego, podemos definir nuestra red neuronal convolucional. En este tutorial, crearemos una CNN simple con dos capas de convolución y dos capas completamente conectadas.
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
# Definir las capas de convolución
self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=1, padding=1)
# Definir las capas completamente conectadas
self.fc1 = nn.Linear(32*8*8, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
# Aplicar las capas de convolución
x = self.conv1(x)
x = nn.ReLU()(x)
x = nn.MaxPool2d(kernel_size=2)(x)
x = self.conv2(x)
x = nn.ReLU()(x)
x = nn.MaxPool2d(kernel_size=2)(x)
# Aplanar la salida para las capas completamente conectadas
x = x.view(-1, 32*8*8)
# Aplicar las capas completamente conectadas
x = self.fc1(x)
x = nn.ReLU()(x)
x = self.fc2(x)
return x
En este código, definimos nuestra CNN como una clase que hereda de nn.Module. En el método init, creamos las capas de convolución y completamente conectadas de nuestra red. En el método forward, definimos cómo se realiza la propagación hacia adelante a través de la red, aplicando las capas de convolución y activación, y luego las capas completamente conectadas.
En la próxima parte de este tutorial, aprenderemos cómo entrenar nuestra CNN en PyTorch utilizando un conjunto de datos de ejemplo. También exploraremos técnicas avanzadas para mejorar el rendimiento de nuestra red, como la regularización y la optimización de hiperparámetros.
Espero que este tutorial haya sido útil para comprender los conceptos básicos de las Redes Neuronales Convolucionales en PyTorch. ¡Buena suerte en tu viaje de aprendizaje de aprendizaje profundo!
Excelente contenido son clases magistrales de ciencia computacional pero super prácticas y en tutoriales wowww….
Super bueno el vídeo, me ha costado mucho el manejo de esta librería, pero sos súper claro en la explicación, gracias 👍🏽
Viva 🇷🇺 Z 🇷🇺, Wagner y 🇲🇽 Z 🇲🇽,… #México apoya al pueblo Ruso y al presidente #Putin 👈🖤💜🖤💜🙏💪💪💪
Hola Pepe, enhorabuena por tus videos. Necesito mejorar mis competencias con pytorch y cnn y tus videos son oro puro. Muchas gracias por compartir !
Hola Pepe. Muy buenos tus videos, estoy terminando de ver los de las redes convolucionales, pero vi todos los primeros que hiciste sobre conceptos de redes neuronales. Una duda que me queda, duda mas bien teórica, ¿por qué al final de toda la red no va una función de activación? Siempre utilizás ReLU para las salidas de las capas intermedias, pero al final no especificás que función de activación se utiliza. ¿Esto es así siempre?
Saludos!
Alguien sabe en donde puedo ver el listado que tiene pytorch en cuanto a que CNN´s maneja?
Muchísimas gracias Pepe fue un tremendo video pero tengo una consulta, cuando realizas la normalización la haces por cada capa y eso es , por que en cada se puede aprender diferentes características de la imagen?
Muy buen vídeo. Me gustaría observar la implementación gráfica, utilizando matplotlib, de las gráficas de entrenamiento de los modelos. Para tener una referencia visual de la mejora del 53% (modelo lineal) vs 63% (modelo Convolucional)
Great!
Muy buen vídeo con todos los detalles muy bien explicados. Gracias Pepe.
Gracias Pepe
Excelente vídeo.