Reduciendo el overfitting
Clase 22 de 29 • Curso de Fundamentos de Redes Neuronales con Python y Keras
Resumen
¿Cómo implementar redes neuronales sencillas para mejorar el desempeño?
Empezar con redes neuronales puede ser abrumador, pero una manera efectiva de controlar el overfitting es reducir la complejidad del modelo. En el caso que vamos a revisar, se utiliza un modelo con menos capas y neuronas para ver cómo se comporta. El primer paso es configurar y ejecutar el modelo ajustando iteraciones y neuronas.
Reducción del número de neuronas en el modelo
Inicialmente, configuramos un modelo más simple disminuyendo las neuronas en las capas. Por ejemplo, si tu modelo original tiene 16 neuronas por capa, podrías reducirlas a 4. Este cambio puede hacer que tu modelo tarde más en hacer overfitting porque la arquitectura es menos compleja.
# Creación de un modelo más sencillo
from keras.models import Sequential
from keras.layers import Dense
model_smaller = Sequential()
model_smaller.add(Dense(4, activation='relu', input_shape=(input_dim,)))
model_smaller.add(Dense(4, activation='relu'))
model_smaller.add(Dense(1, activation='sigmoid'))
model_smaller.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history_smaller = model_smaller.fit(X_train, y_train, epochs=20, validation_data=(X_val, y_val))
Observarás que este modelo más modesto generaliza mejor y reduce el overfitting.
¿Cómo aplicar regularización L2 en redes neuronales?
La regularización es una técnica potente para evitar el overfitting regulando el peso de los parámetros del modelo. Al aplicar Regularización L2, introduces un término adicional en la función de pérdida que penaliza grandes ponderaciones.
Implementación de regularización L2
Para aplicar esta técnica, utilizamos la biblioteca keras
y añadimos la regularización tanto en la capa de entrada como en capas Dense. Aquí se muestra cómo hacerlo:
from keras import regularizers
# Implementación de regularización L2 en el modelo
model_with_regularization = Sequential()
model_with_regularization.add(Dense(16,
activation='relu',
input_shape=(input_dim,),
kernel_regularizer=regularizers.l2(0.001)))
model_with_regularization.add(Dense(16,
activation='relu',
kernel_regularizer=regularizers.l2(0.001)))
model_with_regularization.add(Dense(1, activation='sigmoid'))
model_with_regularization.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history_reg = model_with_regularization.fit(X_train, y_train, epochs=20, validation_data=(X_val, y_val))
Con la regularización L2 (l2
), el modelo se vuelve menos propenso a confiar demasiado en características individuales, mejorando así la capacidad de generalización en conjuntos de validación.
¿Cómo utilizar Dropout para mejorar redes neuronales?
La técnica Dropout es fundamental para hacer las redes neuronales más robustas y menos propensas al overfitting. Dropout consiste en desactivar aleatoriamente un porcentaje de neuronas durante el entrenamiento.
Aplicación de Dropout en el modelo
Con Dropout, un modelo se beneficia al aprender patrones más generales en lugar de depender del ajuste específico de las neuronas individuales. A continuación, se muestra cómo implementar Dropout:
from keras.layers import Dropout
# Implementar Dropout en el modelo
model_with_dropout = Sequential()
model_with_dropout.add(Dense(16, activation='relu', input_shape=(input_dim,)))
model_with_dropout.add(Dropout(0.5))
model_with_dropout.add(Dense(16, activation='relu'))
model_with_dropout.add(Dropout(0.5))
model_with_dropout.add(Dense(1, activation='sigmoid'))
model_with_dropout.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history_dropout = model_with_dropout.fit(X_train, y_train, epochs=20, validation_data=(X_val, y_val))
Al introducir Dropout, se fuerza a la red a aprender características más robustas, reduciendo la correlación entre neuronas, y mitiga la posibilidad de overfitting.
¡Invitación a la experimentación!
Ahora que conoces las técnicas, atrévete a experimentar. Cambia la arquitectura y aplica combinación de regularización L1, L2, o ambas junto a capas de Dropout. Observa cómo mejora la precisión accuracy
de tu modelo y compártelo en el sistema de comentarios del curso. ¡El aprendizaje y la práctica son claves para dominar las redes neuronales!