¿Cómo configurar un entorno para trabajar con NumPy y redes neuronales?
¡Bienvenido! Nos adentramos en el emocionante mundo de las redes neuronales utilizando Python y NumPy. Este camino explorativo nos llevará a implementar funciones básicas como activaciones, pérdidas y entrenamiento con gradient descent. Comencemos con la preparación de nuestro entorno de desarrollo para maximizar la eficiencia.
Configurar Google Colab:
Renombrar el notebook a "Mi primera red con NumPy".
Importar las bibliotecas necesarias como NumPy y Matplotlib para manipulación de matrices y visualización.
Conectar a GPU para velocidad en los cálculos si es necesario: !nvidia-smi.
Importaciones iniciales:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_gaussian_quantiles
¿Cómo generamos el conjunto de datos para nuestra red neuronal?
Para entrenar redes neuronales necesitamos datos. Utilizaremos un conjunto de datos desde cero empleando make_gaussian_quantiles de scikit-learn para crear datos gaussianos con dos círculos concéntricos.
Definir muestras y características:
Usaremos mil ejemplos (n = 1000) con dos características y dos clases.
Crear los datos:
n =1000X, y = make_gaussian_quantiles(n_samples=n, n_features=2, n_classes=2, shuffle=True, random_state=None)y = y[:, np.newaxis]# Agregar un axis para la compatibilidad con futuro codificación
Visualización de los datos:
Un simple gráfico para ver la distribución de los datos.
¿Cómo definir funciones de activación y pérdida esenciales?
Las redes neuronales dependen de funciones que calculan activaciones y pérdidas para adaptarse a la data. Aquí reutilizaremos algunas funciones conocidas con pequeñas modificaciones para el cálculo de derivadas.
Función Sigmoide:
Incluye cálculo de la derivada.
defsigmoid(x, derivada=False):if derivada:return x *(1- x)return1/(1+ np.exp(-x))
Función ReLU:
Una alternativa popular por su simplicidad y efectividad.
¿Cómo configuramos la estructura y peso de una red neuronal?
Para que una red neuronal funcione, necesitamos definir su arquitectura y los pesos iniciales aleatorios, que influyen notablemente en el entrenamiento.
Inicializar los pesos:
Crear una función para definir las capas de entrada, ocultas y de salida.
Definición de la estructura:
definicializar_pesos(layer_dims): np.random.seed(1) parameters ={} L =len(layer_dims)# Longitud de la lista de dimensionesfor l inrange(1, L): parameters['W'+str(l)]= np.random.rand(layer_dims[l], layer_dims[l-1])*2-1 parameters['b'+str(l)]= np.zeros((layer_dims[l],1))return parameters
Ejemplo de uso:
Probar esta configuración inicializando una red con 2 neuronas de entrada, capas ocultas personalizadas, y una sola neurona de salida.
Con esto, tenemos los bloques iniciales necesarios para preparar una red neuronal básica en NumPy y realizar operaciones de entrenamiento en el siguiente paso. ¡Sigue adelante y descubre más sobre el fascinante mundo del aprendizaje automático!
Creando nuestra red neuronal usando numpy y matemáticas