No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Optimización de modelo de clasificación

20/25
Recursos

Aportes 3

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Mis notas de la parte de Normalización (que es la parte que más me costó entender 😅🤭 jeje).

  1. Sacando la media y dev. estándar necesarios para la normalización. Recuerda, solo se utilizan los datos de entrenamiento, porque si utilizamos la data de test estaríamos haciendo trampa (el modelo no debe interactuar con ella hasta después del entrenamiento).
mean = np.mean(x_train)
std = np.std(x_train)
  1. Nuevos datos normalizados. 1+e-7 es un número muy pequeño y sirve para evitar una división entre 0 si “std=0”.

x_train = (x_train - mean) / (std+1e-7)
x_test = (x_test - mean) / (std+1e-7)

Aplicación de Batch Normalization:

Con la normalización por lotes, se calcula la media y la desviación estándar de las activaciones en cada mini lote de datos que pasa por la red. Luego, se normalizan las activaciones utilizando la fórmula mencionada anteriormente.
Además, se introducen parámetros aprendidos
𝛾
γ (escala) y
𝛽
β (sesgo) para ajustar las activaciones normalizadas según sea necesario.

Efecto de Batch Normalization:

Después de aplicar la normalización por lotes, las distribuciones de activaciones se vuelven más estables y centradas alrededor de cero. Esto facilita el entrenamiento de la red y acelera la convergencia.

La normalización por lotes ayuda a mantener las activaciones de las capas ocultas en rangos más estables y cercanos a cero, lo que mejora la estabilidad y velocidad de entrenamiento de las redes neuronales profundas.

La \*\*optimización de un modelo de clasificación\*\* en redes neuronales profundas implica mejorar el rendimiento del modelo ajustando tanto su arquitectura como los parámetros de entrenamiento. Los principales componentes de la optimización incluyen el ajuste de hiperparámetros, la selección de funciones de pérdida, el uso adecuado de optimizadores, la regularización y la mejora en el manejo de los datos. \### 1. \*\*Componentes principales de la optimización\*\* \- \*\*Función de pérdida\*\*: La función de pérdida mide qué tan mal está haciendo el modelo con respecto a las predicciones. En problemas de clasificación, una función de pérdida común es la \*\*entropía cruzada categórica\*\* (`categorical\_crossentropy`) cuando las etiquetas son one-hot encoded o \*\*entropía cruzada escasa\*\* (`sparse\_categorical\_crossentropy`) cuando las etiquetas son enteros. \- \*\*Optimizador\*\*: Los optimizadores controlan cómo se ajustan los pesos de la red basándose en la función de pérdida. Los optimizadores comunes incluyen: \- \*\*SGD (Stochastic Gradient Descent)\*\*: Una versión de gradiente descendente que ajusta los pesos después de evaluar cada mini-lote de datos. \- \*\*Adam\*\*: Un optimizador muy utilizado por su capacidad de adaptarse a las tasas de aprendizaje y manejar mejor los problemas de optimización complicados. \- \*\*Tasa de aprendizaje\*\*: Controla la magnitud de los ajustes de los pesos en cada iteración. Una tasa de aprendizaje muy alta puede hacer que el modelo no converja y una tasa muy baja puede hacer que el proceso sea demasiado lento. \- \*\*Regularización\*\*: Se utiliza para evitar el \*\*overfitting\*\*, que ocurre cuando el modelo se ajusta demasiado a los datos de entrenamiento y no generaliza bien. Las técnicas comunes de regularización incluyen: \- \*\*Dropout\*\*: Apaga neuronas de manera aleatoria durante el entrenamiento. \- \*\*L2 Regularization\*\*: Penaliza los pesos muy grandes. \- \*\*Ajuste de hiperparámetros\*\*: Involucra la experimentación con parámetros como la cantidad de capas, número de neuronas, tasa de aprendizaje, tamaño de lote, etc., para mejorar el rendimiento del modelo. \- \*\*Data Augmentation\*\*: Se utiliza para ampliar artificialmente el conjunto de datos mediante transformaciones aleatorias como rotación, escala o traslación de imágenes. \### 2. \*\*Técnicas avanzadas de optimización\*\* \- \*\*Early Stopping\*\*: Detiene el entrenamiento cuando el rendimiento en los datos de validación deja de mejorar, evitando así el sobreajuste. \- \*\*Reducción de la tasa de aprendizaje\*\*: Reduce la tasa de aprendizaje cuando el rendimiento se estabiliza, permitiendo que el modelo converja más suavemente. \- \*\*Normalización de datos\*\*: Es fundamental asegurarse de que los datos de entrada estén correctamente escalados o normalizados, lo que ayuda al modelo a converger más rápido. \### 3. \*\*Ejemplo de optimización de un modelo de clasificación en Keras\*\* A continuación, se muestra un ejemplo de un modelo de clasificación usando un conjunto de datos de imágenes (Fashion MNIST), que incluye varias técnicas de optimización: ```python import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.optimizers import Adam from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau \# Cargar el conjunto de datos Fashion MNIST (x\_train, y\_train), (x\_test, y\_test) = tf.keras.datasets.fashion\_mnist.load\_data() \# Preprocesamiento de los datos x\_train = x\_train.reshape(-1, 28, 28, 1) / 255.0 # Normalizar x\_test = x\_test.reshape(-1, 28, 28, 1) / 255.0 \# Construcción del modelo model = models.Sequential() \# Primera capa convolucional model.add(layers.Conv2D(32, (3, 3), activation='relu', input\_shape=(28, 28, 1))) model.add(layers.BatchNormalization()) # Normalización por lotes model.add(layers.MaxPooling2D((2, 2))) \# Segunda capa convolucional model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.BatchNormalization()) model.add(layers.MaxPooling2D((2, 2))) \# Aplanar y crear capas densas model.add(layers.Flatten()) model.add(layers.Dense(128, activation='relu')) model.add(layers.BatchNormalization()) model.add(layers.Dropout(0.5)) # Regularización por dropout model.add(layers.Dense(10, activation='softmax')) \# Compilación del modelo optimizer = Adam(learning\_rate=0.001) model.compile(optimizer=optimizer, loss='sparse\_categorical\_crossentropy', metrics=\['accuracy']) \# Callbacks: EarlyStopping y ReduceLROnPlateau early\_stopping = EarlyStopping(monitor='val\_loss', patience=5, restore\_best\_weights=True) reduce\_lr = ReduceLROnPlateau(monitor='val\_loss', factor=0.1, patience=3) \# Entrenamiento del modelo history = model.fit(x\_train, y\_train, batch\_size=64, epochs=30, validation\_split=0.2, callbacks=\[early\_stopping, reduce\_lr], verbose=2) \# Evaluación del modelo test\_loss, test\_acc = model.evaluate(x\_test, y\_test) print(f'Test accuracy: {test\_acc}') ``` \### Explicación del ejemplo: 1\. \*\*Preprocesamiento\*\*: Los datos de Fashion MNIST son escalados (normalizados) para estar entre 0 y 1, lo que ayuda al modelo a converger más rápidamente. 2\. \*\*Construcción del modelo\*\*: \- Se incluyen dos capas convolucionales seguidas de normalización por lotes (`BatchNormalization`) y pooling. \- Se agrega una capa completamente conectada con `Dropout` para evitar el sobreajuste. 3\. \*\*Compilación\*\*: El modelo se compila con el optimizador \*\*Adam\*\*, una tasa de aprendizaje inicial de `0.001`, y la función de pérdida de entropía cruzada escasa. 4\. \*\*Callbacks\*\*: \- \*\*EarlyStopping\*\*: Detiene el entrenamiento si el rendimiento en los datos de validación deja de mejorar durante 5 épocas consecutivas. \- \*\*ReduceLROnPlateau\*\*: Si el rendimiento no mejora después de 3 épocas, reduce la tasa de aprendizaje para permitir una convergencia más fina. 5\. \*\*Entrenamiento\*\*: El modelo se entrena en los datos con una división del 20% para validación. \### Conclusión: Optimizar un modelo de clasificación implica ajustar cuidadosamente sus hiperparámetros, aplicar técnicas de regularización y usar optimizadores adecuados. Las estrategias como \*\*EarlyStopping\*\*, \*\*ReduceLROnPlateau\*\*, y el uso de técnicas de \*\*Batch Normalization\*\* o \*\*Dropout\*\* ayudan a mejorar la precisión del modelo mientras se previene el sobreajuste.