Categorías
Inteligencia artificial

¿Cómo pasar de celcius a fahrenheit con una red neuronal?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Créditos: Algoritmo del vídeo de Ringa Tech llamado «Tu primera red neuronal en Python y Tensorflow»

Estos son mis apuntes del mencionado vídeo, en caso de haber un error, agradezco tu sugerencia en el botón de abajo de «Corregir este aporte».


No olvides de ir compilando cada paso en caso que utilices Google Colab.

Importación de frameworks de tensorflow y numpy.

import tensorflow as tf
import numpy as np

Arreglos de números donde se colocan los datos de entrada de celcius y los resultados de fahrenheit.

celsius = np.array([-40, -10, 0, 8, 15, 22, 38], dtype = float)
fahrenheit = np.array([-40, 14, 32, 46, 59, 72, 100], dtype = float)

Definición de capas

«tf.keras.layers.Dense» Hace referencia que define una capa de tipo densa. (Las capas de tipo densa significan que cada neurona de una capa, tienen conexiones a todas las neuronas de la siguiente capa).

«units = 1» Hace referencia que hay una neurona de salida.

«input_shape = [1]» Significa que hay una capa de entrada con una sola neurona.

«modelo = tf.keras.Sequential([capa])» Definición de modelo de capa secuencial, asignado a nuestra variable «capa».

capa = tf.keras.layers.Dense(units = 1, input_shape = [1])
modelo = tf.keras.Sequential([capa])

Definición del optimizador y función de perdida

Para el optimizador se utiliza el algoritmo Adam (Adam es un algoritmo de optimización que se puede utilizar en lugar del procedimiento de descenso de gradiente para actualizar los pesos de red de forma automática), en este caso se le asigna el valor de 0.1, porque poco puede hacer lenta la red, y mucho, pasarse del resultado esperado.

modelo.compile(
    optimizer = tf.keras.optimizers.Adam(0.1),
    loss = 'mean_squared_error'
)

Entrenamiento

Se utiliza la función «.fit» sobre el modelo, ejemplo «modelo.fit» especificando los datos de entrada (En este caso la lista celcius) y los datos de salida (En este caso fahrenheit), luego se definen las épocas por las que iterará, con la función «epochs = valor» y para solo imprimir lo esencial se utiliza «verbose = False»

print("Entrenamiento...")
historial = modelo.fit(celsius, fahrenheit, epochs = 1000, verbose = False)
print("Modelo entrenado")

Imprimir los resultados de la función de perdida

(Qué tan mal están los resultados en cada iteración de aprendizaje en las épocas)

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

Predicción

En este caso se hace una predicción de cuantos son 100 grados celcius en fahrenheit, «El resultado es[[211.74268]]fahrenheit», En realidad es 212 fahrenheit, pero redondeandolo es correcto, una opción podría ser redondearlo con la función round de python para estos casos.

print("Hagamos una predicción")
resultado = modelo.predict([100.0])
print("El resultado es"+ str(resultado) + "fahrenheit")

¿Cómo ver el peso y el sesgo?

print("variable interna del modelo")
print(capa.get_weights())

Anotaciones: En este caso una red neuronal más compleja (agregar capas ocultas) puede terminar de aprender en una época más temprana.

Deja una respuesta

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