#!/usr/bin/env python3 # ======================================== # IA: RED NEURONAL PARA CONVERSIÓN DE TEMPERATURA # Proyecto: Introducción a Redes Neuronales # Autor: Gabriel - Técnico en IA # Framework: TensorFlow 2.x + Keras # ======================================== import tensorflow as tf import numpy as np # Dataset de entrenamiento: 7 ejemplos reales de temperatura celsius = np.array([-40, -10, 0, 8, 15, 22, 38], dtype=float) fahrenheit = np.array([-40, 14, 32, 46, 59, 72, 100], dtype=float) # Reformatear para TensorFlow: convertir a matriz de columna (7 filas, 1 columna) celsius = celsius.reshape(-1, 1) fahrenheit = fahrenheit.reshape(-1, 1) # Arquitectura de la red neuronal # Capa oculta 1: 3 neuronas que reciben 1 valor de entrada (Celsius) oculta1 = tf.keras.layers.Dense(units=3, input_shape=[1]) # Capa oculta 2: 3 neuronas adicionales para mayor capacidad de aprendizaje oculta2 = tf.keras.layers.Dense(units=3) # Capa de salida: 1 neurona que produce la predicción (Fahrenheit) salida = tf.keras.layers.Dense(units=1) # Construir el modelo secuencial: entrada → oculta1 → oculta2 → salida modelo = tf.keras.Sequential([ oculta1, oculta2, salida ]) # Compilar el modelo: # • optimizer: Adam (algoritmo de descenso de gradiente adaptativo) # • loss: mean_squared_error (penaliza errores grandes más que pequeños) modelo.compile( optimizer=tf.keras.optimizers.Adam(0.1), # Tasa de aprendizaje = 0.1 loss='mean_squared_error' ) # Entrenar el modelo: # • epochs=1000: repetir el proceso de aprendizaje 1000 veces # • verbose=False: no mostrar logs durante el entrenamiento modelo.fit(celsius, fahrenheit, epochs=1000, verbose=False) # Predicción: ¿Cuánto es 25°C en Fahrenheit? # La red nunca vio este valor durante el entrenamiento resultado = modelo.predict(np.array([[25.0]])) # Mostrar resultado print(f"25°C = {resultado[0][0]:.2f}°F") # Output: ~76.98°F