Hoy os voy a enseñar cómo crear una pequeña red neuronal capaz de predecir la fórmula de pasar horas a minutos.
Para realizar esta Inteligencia Artificial, vamos a utilizar TensorFlow, una librería creada por Google que nos facilitara. Para instalarla ponemos:
python3 -m pip install tensorflow
Ahora creamos un archivo nuevo que lo llamamos velocidad.py
Vamos a empezar a añadir las dependencias:
import tensorflow as tf import numpy as np
Ahora creamos unos datos de ejemplo de entrenamiento. No son los mejores datos de entrenamiento, pero para el ejemplo, valen.
# datos de entrenamiento horas y minutos (resultado), entrenamiento supervisado horas = np.array([1.0, 2.0, 3.0, 4.0, 4.5, 5.0, 10.0, 23.0, 15.0, 24.0, 1.5, 1.2, 3.3, 5.3, 100.0, 12.3, 3.4], dtype=float) minutos = np.array([60.0, 120.0, 180.0, 240.0, 270.0, 300.0, 600.0, 1380.0, 900.0, 1440.0, 90.0, 72.0, 198.0, 318.0, 6000.0, 738.0, 204.0], dtype=float)
Se crean dos arrays, uno con las horas y otro con la equivalencia en minutos. Al realizarse un entrenamiento supervisado, se va a entrenar el sistema, dando unos datos de entrada (horas) y los datos del resultado esperado (minutos).
Si queremos mejorar la Red Neuronal, tendremos que añadir más datos, cuantos más datos se añadan mejor.
Ahora vamos a crear el modelo para aprendizaje.
# Crea el modelo, usa 0.1 como tasa de aprendizaje y la función de pérdida es minimos cuadrados modelo.compile( optimizer=tf.keras.optimizers.Adam(0.1), loss='mean_squared_error' )
Primero añadimos el optimizador Adam con incremento de 0.1 (incrementa los índices de los nodos 0.1).
Además, incluimos como función de pérdida mínimos cuadrados.
Ahora tendremos que entrenar a nuestra Inteligencia Artificial.
# entrena el modelo print("Entrenando el modelo...") modelo_entrenado = modelo.fit(horas, minutos, epochs=1000, verbose=False) print("Modelo entrenado OK")
Aquí indicamos que realice 1000 iteraciones sobre cada valor y que no nos imprima el log (verbose=False)
Una vez entrenado podemos predecir un valor.
En este caso vamos a predecir el valor de 9.0 horas:
# hacer una predicción print("¿Cuántos minutos son 9 horas?") resultado = modelo.predict([9.0]) print("9 horas son " + str(resultado) + " minutos")
Todo el código completo queda de la siguiente forma:
# Red neuronal que transorma horas y minutos a segundos import tensorflow as tf import numpy as np # datos de entrenamiento horas = np.array([1.0, 2.0, 3.0, 4.0, 4.5, 5.0, 10.0, 23.0, 15.0, 24.0, 1.5, 1.2, 3.3, 5.3, 100.0, 12.3, 3.4], dtype=float) minutos = np.array([60.0, 120.0, 180.0, 240.0, 270.0, 300.0, 600.0, 1380.0, 900.0, 1440.0, 90.0, 72.0, 198.0, 318.0, 6000.0, 738.0, 204.0], dtype=float) # Crea dos neuronas: una para la capa de entrada y otra para la capa de salida capa = tf.keras.layers.Dense(units=1, input_shape=[1]) modelo = tf.keras.Sequential([capa]) # Crea el modelo, usa 0.1 como tasa de aprendizaje y la función de pérdida es minimos cuadrados modelo.compile( optimizer=tf.keras.optimizers.Adam(0.1), loss='mean_squared_error' ) # entrena el modelo print("Entrenando el modelo...") modelo_entrenado = modelo.fit(horas, minutos, epochs=1000, verbose=False) print("Modelo entrenado OK") # hacer una predicción print("¿Cuántos minutos son 9 horas?") resultado = modelo.predict([9.0]) print("9 horas son " + str(resultado) + " minutos")
Al ejecutarlo consigue predecir lo siguiente:
Nuestra Red Neuronal ha predicho que 9 horas son 551.87854 minutos, pero como sabemos en realidad son 540 minutos. Se acerca a la solución, pero esto demuestra que necesita más datos de entrenamiento.
Los datos de entrenamiento es la parte más importante de una red de inteligencia artificial, tendremos que buscar unos datos fiables y que además sea en gran cantidad para poder lograr resultados óptimos.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.