Compilación del modelo
En Keras, la compilación del modelo es el paso en el que se especifican los elementos necesarios para el entrenamiento del modelo, como el optimizador, la función de pérdida (o función de costo) y las métricas de evaluación. La compilación prepara el modelo para el entrenamiento, permitiendo a Keras saber qué tipo de algoritmo y criterios usar para ajustar los pesos y evaluar el rendimiento.
Elementos de la Compilación en Keras
- Optimizador (
optimizer
): Controla cómo se ajustan los pesos del modelo para reducir la función de pérdida. Ejemplos:adam
: Un optimizador popular que adapta los pasos de aprendizaje.sgd
: Gradiente descendente estocástico, útil para modelos más simples.rmsprop
: Ideal para redes recurrentes.
- Función de Pérdida (
loss
): Mide qué tan bien o mal el modelo está prediciendo en relación con las etiquetas reales. La pérdida se minimiza durante el entrenamiento.binary_crossentropy
: Para clasificación binaria.categorical_crossentropy
: Para clasificación multi-clase.mean_squared_error
: Para problemas de regresión (predicción de valores continuos).
- Métricas (
metrics
): Son métricas de evaluación que ayudan a monitorear el rendimiento del modelo, sin que afecten el proceso de entrenamiento.accuracy
: Precisión del modelo, común en problemas de clasificación.mae
(mean absolute error): Error medio absoluto, común en problemas de regresión.
Ejemplo Básico de Compilación en Keras
Supongamos que tienes un modelo de red neuronal con capas densas y quieres compilarlo para un problema de clasificación binaria.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# Definimos un modelo secuencial simple
model = Sequential([
Dense(16, activation='relu', input_shape=(10,)), # Capa oculta con ReLU y 10 características de entrada
Dense(8, activation='relu'), # Otra capa oculta
Dense(1, activation='sigmoid') # Capa de salida con activación sigmoide para clasificar 0 o 1
])
# Compilación del modelo
model.compile(
optimizer='adam', # Optimizador Adam
loss='binary_crossentropy', # Función de pérdida para clasificación binaria
metrics=['accuracy'] # Métrica de precisión
)
# Resumen del modelo para visualizar su estructura
model.summary()
Explicación
- Optimizador: Usamos
adam
para una actualización eficiente de los pesos. - Función de Pérdida:
binary_crossentropy
, que es adecuada para problemas de clasificación binaria. - Métrica:
accuracy
, para medir la proporción de predicciones correctas en el conjunto de datos.
El modelo ahora está listo para entrenarse con el método fit()
. Esta compilación asegura que el modelo ajuste los pesos de manera óptima para el problema.
Ejemplo Completo con Entrenamiento
Una vez compilado el modelo, puedes entrenarlo con datos. Supongamos que tienes datos de entrada x_train
y etiquetas y_train
.
import numpy as np
# Datos ficticios de entrenamiento
x_train = np.random.random((100, 10)) # 100 muestras, 10 características
y_train = np.random.randint(0, 2, 100) # 100 etiquetas (0 o 1)
# Entrenamiento del modelo
model.fit(x_train, y_train, epochs=10, batch_size=4)
Explicación de Parámetros en fit
epochs
: Número de veces que el modelo verá todo el conjunto de entrenamiento.batch_size
: Número de muestras procesadas antes de actualizar los pesos.
Compilación para un Problema de Clasificación Multi-Clase
En un problema de clasificación multi-clase, usamos categorical_crossentropy
y softmax
en la capa de salida.
# Modelo para clasificación multi-clase con 3 clases
model_multiclass = Sequential([
Dense(16, activation='relu', input_shape=(10,)),
Dense(8, activation='relu'),
Dense(3, activation='softmax') # Capa de salida para 3 clases con softmax
])
# Compilación del modelo
model_multiclass.compile(
optimizer='adam',
loss='categorical_crossentropy', # Pérdida para clasificación multi-clase
metrics=['accuracy']
)
Este modelo es adecuado para clasificación de múltiples clases, con salidas en probabilidad para cada clase (3 en este caso).
Compilación para Problemas de Regresión
Para problemas de regresión, donde el objetivo es predecir un valor continuo, usamos funciones de pérdida como mean_squared_error
.
# Modelo para regresión
model_regression = Sequential([
Dense(16, activation='relu', input_shape=(10,)),
Dense(8, activation='relu'),
Dense(1) # Capa de salida sin activación para valores continuos
])
# Compilación del modelo
model_regression.compile(
optimizer='adam',
loss='mean_squared_error', # Pérdida para regresión
metrics=['mae'] # Error absoluto medio
)
Aquí, mean_squared_error
mide el error cuadrado medio y mae
muestra el error promedio entre predicciones y valores reales, una métrica informativa en regresión.