Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación de una Red Neuronal Simple | Redes Neuronales en PyTorch
Esenciales de PyTorch

bookCreación de una Red Neuronal Simple

Nuestro objetivo es construir una red neuronal básica en PyTorch utilizando el conjunto de datos digits, un conjunto clásico en el aprendizaje automático. La tarea consiste en predecir el dígito (objetivo) a partir de la imagen de su escritura a mano, representada como un conjunto de valores de píxeles (características).

Descripción del conjunto de datos

El conjunto de datos digits contiene imágenes de dígitos escritos a mano representadas como valores numéricos de píxeles. Cada muestra consta de 64 características, que corresponden a las intensidades de los píxeles de una imagen en escala de grises de 8×8. La variable objetivo (columna 'target') representa la clase del dígito (0-9), indicando a qué número corresponde la imagen.

El primer paso es leer el archivo CSV y extraer las características (X) y la variable objetivo (y), que representa la salida que se desea predecir:

import pandas as pd

digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv')
# Extract features and target
X = digits_df.drop(columns=["target"]).values
y = digits_df["target"].values

Definición de la clase del modelo

Primero, se deben importar todos los módulos necesarios de PyTorch (nn, F). El módulo nn se utiliza para definir capas y arquitecturas del modelo, mientras que el módulo F contiene funciones de activación, funciones de pérdida y otras utilidades que suelen emplearse en un estilo funcional.

import torch.nn as nn
import torch.nn.functional as F

Ahora se puede proceder a definir la clase del modelo:

class DigitsClassifier(nn.Module):
    ...

Arquitectura del Modelo

Dado que la tarea es una clasificación multiclase simple, un perceptrón multicapa (MLP) con 2 capas ocultas es suficiente.

class DigitsClassifier(nn.Module):
    def __init__(self, input_features, hidden1, hidden2, output_classes):
        super().__init__()
        # Define the layers
        self.fc1 = nn.Linear(input_features, hidden1)  # Input to first hidden layer
        self.fc2 = nn.Linear(hidden1, hidden2)  # First hidden to second hidden layer
        self.out = nn.Linear(hidden2, output_classes)  # Second hidden to output layer

Como ya se sabe, un MLP consta de capas totalmente conectadas (también llamadas capas densas), donde las capas ocultas procesan las características de entrada y la capa de salida proporciona las predicciones finales de clase. Estas capas totalmente conectadas se representan como capas nn.Linear en PyTorch.

Propagación Hacia Adelante

El método .forward() define la propagación hacia adelante de los datos a través del modelo.

def forward(self, x):
    # Pass data through layers with activation functions
    a1 = F.relu(self.fc1(x))  # First hidden layer with ReLU
    a2 = F.relu(self.fc2(a1))  # Second hidden layer with ReLU
    output = self.out(a2)          # Output layer (no activation for raw scores)
    return output

El tensor de entrada x se pasa primero por la primera capa totalmente conectada (fc1), seguida de la función de activación ReLU para introducir no linealidad. Luego pasa por la segunda capa totalmente conectada (fc2), nuevamente seguida de ReLU.

Finalmente, los datos transformados pasan por la capa de salida (out), que produce los valores brutos (logits) para las clases de salida.

Creación del Modelo

Ahora que la clase del modelo está definida, podemos definir los parámetros del modelo e instanciar el modelo.

De manera similar al número de capas ocultas, el número de neuronas en cada capa oculta se elige de forma arbitraria en nuestro ejemplo: 32 y 16 para la primera y segunda capa oculta, respectivamente.

En consecuencia, el modelo resultante se estructura de la siguiente manera:

  • Capa de entrada: coincide con el número de características en el conjunto de datos (64 para este conjunto de datos);
  • Capas ocultas: cantidades arbitrarias de neuronas (32 y 16);
  • Capa de salida: coincide con el número de clases (10 dígitos).

Implementación Completa

12345678910111213141516171819202122232425262728293031323334
import torch.nn as nn import torch.nn.functional as F import pandas as pd digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv') # Extract features and target X = digits_df.drop(columns=["target"]).values y = digits_df["target"].values # Define the model class class DigitsClassifier(nn.Module): def __init__(self, input_features, hidden1, hidden2, output_classes): super().__init__() # Define the layers self.fc1 = nn.Linear(input_features, hidden1) # Input to first hidden layer self.fc2 = nn.Linear(hidden1, hidden2) # First hidden to second hidden layer self.out = nn.Linear(hidden2, output_classes) # Second hidden to output layer def forward(self, x): # Pass data through layers with activation functions a1 = F.relu(self.fc1(x)) # First hidden layer with ReLU a2 = F.relu(self.fc2(a1)) # Second hidden layer with ReLU output = self.out(a2) # Output layer (no activation for raw scores) return output # Define model parameters input_features = X.shape[1] # Number of features (pixels) hidden1 = 32 # Number of neurons in first hidden layer hidden2 = 16 # Number of neurons in second hidden layer output_classes = len(digits_df["target"].unique()) # Number of unique digits (0-9) # Create an instance of the model model = DigitsClassifier(input_features, hidden1, hidden2, output_classes) # Display the model structure print(model)
copy
question mark

¿Cuál de las siguientes afirmaciones sobre la implementación de una red neuronal en PyTorch es correcta?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain how to train this model on the digits dataset?

What loss function and optimizer should I use for this classification task?

How do I prepare the data for input into the PyTorch model?

Awesome!

Completion rate improved to 5

bookCreación de una Red Neuronal Simple

Desliza para mostrar el menú

Nuestro objetivo es construir una red neuronal básica en PyTorch utilizando el conjunto de datos digits, un conjunto clásico en el aprendizaje automático. La tarea consiste en predecir el dígito (objetivo) a partir de la imagen de su escritura a mano, representada como un conjunto de valores de píxeles (características).

Descripción del conjunto de datos

El conjunto de datos digits contiene imágenes de dígitos escritos a mano representadas como valores numéricos de píxeles. Cada muestra consta de 64 características, que corresponden a las intensidades de los píxeles de una imagen en escala de grises de 8×8. La variable objetivo (columna 'target') representa la clase del dígito (0-9), indicando a qué número corresponde la imagen.

El primer paso es leer el archivo CSV y extraer las características (X) y la variable objetivo (y), que representa la salida que se desea predecir:

import pandas as pd

digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv')
# Extract features and target
X = digits_df.drop(columns=["target"]).values
y = digits_df["target"].values

Definición de la clase del modelo

Primero, se deben importar todos los módulos necesarios de PyTorch (nn, F). El módulo nn se utiliza para definir capas y arquitecturas del modelo, mientras que el módulo F contiene funciones de activación, funciones de pérdida y otras utilidades que suelen emplearse en un estilo funcional.

import torch.nn as nn
import torch.nn.functional as F

Ahora se puede proceder a definir la clase del modelo:

class DigitsClassifier(nn.Module):
    ...

Arquitectura del Modelo

Dado que la tarea es una clasificación multiclase simple, un perceptrón multicapa (MLP) con 2 capas ocultas es suficiente.

class DigitsClassifier(nn.Module):
    def __init__(self, input_features, hidden1, hidden2, output_classes):
        super().__init__()
        # Define the layers
        self.fc1 = nn.Linear(input_features, hidden1)  # Input to first hidden layer
        self.fc2 = nn.Linear(hidden1, hidden2)  # First hidden to second hidden layer
        self.out = nn.Linear(hidden2, output_classes)  # Second hidden to output layer

Como ya se sabe, un MLP consta de capas totalmente conectadas (también llamadas capas densas), donde las capas ocultas procesan las características de entrada y la capa de salida proporciona las predicciones finales de clase. Estas capas totalmente conectadas se representan como capas nn.Linear en PyTorch.

Propagación Hacia Adelante

El método .forward() define la propagación hacia adelante de los datos a través del modelo.

def forward(self, x):
    # Pass data through layers with activation functions
    a1 = F.relu(self.fc1(x))  # First hidden layer with ReLU
    a2 = F.relu(self.fc2(a1))  # Second hidden layer with ReLU
    output = self.out(a2)          # Output layer (no activation for raw scores)
    return output

El tensor de entrada x se pasa primero por la primera capa totalmente conectada (fc1), seguida de la función de activación ReLU para introducir no linealidad. Luego pasa por la segunda capa totalmente conectada (fc2), nuevamente seguida de ReLU.

Finalmente, los datos transformados pasan por la capa de salida (out), que produce los valores brutos (logits) para las clases de salida.

Creación del Modelo

Ahora que la clase del modelo está definida, podemos definir los parámetros del modelo e instanciar el modelo.

De manera similar al número de capas ocultas, el número de neuronas en cada capa oculta se elige de forma arbitraria en nuestro ejemplo: 32 y 16 para la primera y segunda capa oculta, respectivamente.

En consecuencia, el modelo resultante se estructura de la siguiente manera:

  • Capa de entrada: coincide con el número de características en el conjunto de datos (64 para este conjunto de datos);
  • Capas ocultas: cantidades arbitrarias de neuronas (32 y 16);
  • Capa de salida: coincide con el número de clases (10 dígitos).

Implementación Completa

12345678910111213141516171819202122232425262728293031323334
import torch.nn as nn import torch.nn.functional as F import pandas as pd digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv') # Extract features and target X = digits_df.drop(columns=["target"]).values y = digits_df["target"].values # Define the model class class DigitsClassifier(nn.Module): def __init__(self, input_features, hidden1, hidden2, output_classes): super().__init__() # Define the layers self.fc1 = nn.Linear(input_features, hidden1) # Input to first hidden layer self.fc2 = nn.Linear(hidden1, hidden2) # First hidden to second hidden layer self.out = nn.Linear(hidden2, output_classes) # Second hidden to output layer def forward(self, x): # Pass data through layers with activation functions a1 = F.relu(self.fc1(x)) # First hidden layer with ReLU a2 = F.relu(self.fc2(a1)) # Second hidden layer with ReLU output = self.out(a2) # Output layer (no activation for raw scores) return output # Define model parameters input_features = X.shape[1] # Number of features (pixels) hidden1 = 32 # Number of neurons in first hidden layer hidden2 = 16 # Number of neurons in second hidden layer output_classes = len(digits_df["target"].unique()) # Number of unique digits (0-9) # Create an instance of the model model = DigitsClassifier(input_features, hidden1, hidden2, output_classes) # Display the model structure print(model)
copy
question mark

¿Cuál de las siguientes afirmaciones sobre la implementación de una red neuronal en PyTorch es correcta?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1
some-alt