2.7 - Práctica 2: la Regresión Lineal en Keras

Lección 7 de la sección “Redes Neuronales” del curso Fundamentos de Deep Learning con Python.

Introducción

En las lecciones anteriores vimos en detalle el algoritmo de Regresión Lineal y el algoritmo del Gradiente Estocástico con mini-batch.

En esta práctica usaremos estas ideas para resolver un problema de Regresión Lineal en Keras, una de las librerías más usadas actualmente para implementar modelos de Deep Learning. Así, con este ejemplo práctico afianzaremos los diferentes conceptos vistos hasta el momento y además tendremos una introducción a esta librería, que será la que en adelante usaremos para implementar los diferentes modelos que veremos a lo largo del curso.

Contenido exclusivo suscriptores

Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Lectura y visualización del set de datos

En esta práctica usaremos el mismo set de datos de la práctica 1, en donde implementamos la Regresión Lineal desde cero en Python. De nuevo, una vez importado este set de datos desde Google Drive podemos leerlo en Google Colab usando la librería Pandas.

Recordemos que este set contiene un total de 100 datos, cada uno de ellos correspondiente al área de un inmueble (variable independiente, entrada al modelo) y a su precio (variable dependiente, salida del modelo). Además recordemos que estas dos variables están relacionadas linealmente. Estas variables las podemos extraer del set de datos usando las siguientes líneas de código:

x = data['Area'].values
y = data['Precio'].values

Donde data es precisamente el DataFrame de Pandas que hemos creado al leer el dataset.

El objetivo es entonces implementar un modelo de Regresión Lineal que sea capaz de predecir el valor del inmueble dada su área. Para lo anterior usaremos precisamente la librería Keras.

Construcción del modelo lineal en Keras

La implementación de este modelo en Keras es bastante sencilla. En primer lugar debemos importar los módulos necesarios de esta librería: Sequential para crear un contenedor vacío al que luego progresivamente iremos añadiendo diferentes elementos; Dense para añadir elementos al modelo; SGD (Stochastic Gradiend Descent) para usar el Gradiente Descendente Estocástico como algoritmo de optimización.

Una vez importados estos módulos debemos seguir estos sencillos pasos para la implementación del modelo:

  1. Fijar la semilla del generador aleatorio para garantizar la reproducibilidad del entrenamiento:
import numpy as np
import tensorflow as tf

np.random.seed(25)
tf.random.set_seed(25)
  1. Crear un “contenedor”, es decir una variable en Python en la cual almacenaremos el modelo. Este contenedor vacío lo crearemos con Sequential:
modelo = Sequential()
  1. Añadir los diferentes elementos del modelo al contenedor, usando el método add y el módulo Dense. En este caso simplemente debemos especificar que el modelo tendrá una entrada (el área del inmueble), una salida (el precio) y una función de activación lineal. ¡Y todo esto lo podemos definir en tan sólo una línea de código!:
modelo.add(Dense(1, activation='linear', input_shape=((1,))))

Y en este punto podemos comparar el código anterior con las múltiples líneas que fueron requeridas para implementar el mismo modelo cuando simplemente usamos Python, sin ninguna librería adicional. Ésta es precisamente la importancia y utilidad de Keras, pues en muy pocas líneas de código, y usando una programación bastante intuitiva, podemos crear modelos tan simples o complejos como queramos.

Una vez creado el modelo podemos verificar sus principales características, usando el método summary. Con esto podremos comprobar que el modelo contiene únicamente 2 parámetros por entrenar, correspondientes a los coeficientes de la ecuación de la recta que queremos encontrar.

Creación del optimizador (Gradiente Descendente Estocástico) y pérdida

Una vez creado el modelo el siguiente paso es definir el optimizador que usaremos durante el entrenamiento así como la pérdida que queremos optimizar.

Para el primer caso usaremos el módulo SGD y definiremos una tasa de aprendizaje (parámetro learning_rate) igual a 0.00001.

Para el caso de la pérdida debemos primero “compilar” el modelo. Con esta compilación, de manera simultánea especificaremos tanto el optimizador como la pérdida (que en este caso será el error cuadrático medio). Todo esto lo podemos hacer en tan sólo una línea de código:

modelo.compile(optimizer=optimizador, loss='mse')

Entrenamiento del modelo

Realmente es muy sencillo este paso. Simplemente tenemos que especificar el número de iteraciones (n_epochs = 20) así como el tamaño del lote (recordemos lo discutido en el algoritmo del Gradiente Descendente con mini-batch). En este caso usaremos un tamaño de lote de 10 (s_minibatches = 10).

Posteriormente, basta con usar el método fit para llevar a cabo el entrenamiento del modelo:

historia = modelo.fit(x,y,epochs=n_epochs,batch_size=s_minibatches,verbose=1)

Podemos verificar que el entrenamiento ha sido correcto, graficando (con ayuda de Matplotlib) la variable historia. Al hacer esto podremos comprobar que a medida que avanzan las iteraciones la pérdida progresivamente va disminuyendo.

Predicción con el modelo entrenado

Habiendo comprobado el correcto entrenamiento del modelo, podemos usarlo para generar nuevas predicciones. En este caso basta con usar el método predict que aceptará como argumento uno o múltiples valores de entrada al modelo (en nuestro caso las áreas de los inmuebles) y generará de esta forma las predicciones correspondientes usando el modelo lineal ya entrenado.

Contenido exclusivo suscriptores

Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Hemos visto lo simple que resulta resolver un problema de Regresión Lineal usando la librería Keras. A pesar de que se trata de un modelo muy simple, como veremos más adelante en el curso podremos usar esta misma lógica para implementar y entrenar de forma muy sencilla modelos mucho más complejos usando esta librería.

En este punto ya tenemos los elementos conceptuales y de programación esenciales para comenzar a adentrarnos en el Deep Learning. Así que en la próxima lección hablaremos del bloque fundamental de todas las arquitecturas que veremos más adelante: la Neurona Artificial.

Ver todas las lecciones de este curso