Categorías
Programación

Machine Learning – Neural Networks

Aprendizaje Automático

La ecuación que utilizaremos es y = 3.33x – 6.13. Dicha ecuación será la que deba nuestra red predecir y aprender a resolver.

Para iniciar, vamos a importar los paquetes necesarios.

import tensorflow as tf
from tensorflow import keras
import numpy as np

Crearemos los conjuntos de datos de entrada (x) y salida (y), estos datos son históricos, ya han sido evaluados con anterioridad.

xs = np.array([6.0,9.0,-5.0,2.0,0.0,1.0,8.0,4.0], dtype=float)
ys = np.array([13.85,23.84,-22.78,0.53,-6.13,-2.8,20.51,7.19], dtype=float)

Ahora se va a establecer cómo será nuestro modelo. Para este caso, la red neuronal constará de una neurona de entrada (x) y una salida (y). Va a ser optimizada por SGD (siendo el algoritmo más simple para encontrar parámetros que minimizan la función de un valor dado). O también se puede utilizar eloptimizador Adam. Para la función de error, utilizaremos la función de mean_squared_error (error cuadrático medio, para comprobar un valor predicho y un valor observado o conocido).

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
#model.compile(optimizer='sgd', loss='mean_squared_error')
model.compile(tf.keras.optimizers.Adam(0.1), loss='mean_squared_error')

Ahora debemos entrenar nuestro modelo, utilizando el conjunto de datos que se definieron previamente (x) y (y), así como establecer un número de iteraciones para su aprendizaje.

historico = model.fit(xs, ys, epochs=300, verbose=False)

Vamos a revisar el resultado de la función de pérdida durante las iteraciones (epochs), mediante una gráfica para poder visualizar en que iteración nuestro modelo dejo de aprender.

import matplotlib.pyplot as plt
plt.xlabel("Epochs")
plt.ylabel("Magnitud de pérdida")
plt.plot(historico.history["loss"])

Podemos visualizar que a partir de la iteración 200, el modelo dejo de aprender.

Con los pasos anteriores tenemos ya creado nuestro modelo, entrenado y preparado para realizar predicciones. Podremos comprobarlo con diferentes valores de entrada (x), donde el resultado estará muy cercano a la ecuación que modelamos: y = 3.33x – 6.13. Realizaremos una predicción con el número 13.69 y el resultado debería ser 39.46 o un valor aproximado.

print(model.predict([13.69]))
[[39.45634]]

Ahora vamos a obtener los valores de peso.

print(model.get_weights())
[array([[3.3159046]], dtype=float32), array([-6.0049353], dtype=float32)]

Aquí podemos observar 3.31590 y -6.0049, siendo los valores que el aprendizaje automático determinó para la ecuación con los valores previamente establecidos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *