Proyecto 02 | Redes Neuronales

🧠 IA que Aprende sin Fórmulas

Red neuronal artificial entrenada con TensorFlow que descubre la relación entre Celsius y Fahrenheit sin conocer la fórmula matemática. Desarrollado como parte de mi formación en Inteligencia Artificial.

💡 Concepto clave:
Esta IA no sabe que F = (C × 9/5) + 32.
Aprendió la relación analizando solo 7 ejemplos de temperaturas.
Es Inteligencia Artificial real: un modelo que descubre patrones sin programación explícita.

🔮 Simulación Educativa: ¿Cómo "Piensa" la IA?

⚠️ Nota: Esta es una simulación didáctica que ilustra el concepto de aprendizaje automático. Mi IA real se ejecuta en Python con TensorFlow (código auténtico disponible para descargar abajo).

⏳ Simulación lista (entrenada con 7 ejemplos reales)

¿Qué está simulando esta demo?
• Tu IA real con TensorFlow usa 7 ejemplos para aprender
• Esta simulación muestra cómo una neurona simple "descubre" la relación
• Ambas ignoran la fórmula matemática y aprenden de datos
• La diferencia: tu IA real tiene capas ocultas y optimización Adam

01. Dataset de Entrenamiento

La IA necesita ejemplos para aprender. Aquí proporcionamos 7 pares de temperaturas Celsius y Fahrenheit reales. La red neuronal analizará estos datos para descubrir el patrón oculto:

Ejemplos utilizados:
• -40°C → -40°F (punto de congelación del mercurio)
• 0°C → 32°F (punto de congelación del agua)
• 100°C → 212°F (punto de ebullición del agua)
• +4 ejemplos intermedios para suavizar el aprendizaje

⚠️ La IA no sabe que existe una fórmula matemática. Solo ve números y busca correlaciones.

celsius_to_fahrenheit.py

# 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)
                

🔍 ¿Por qué reshape(-1, 1)?
TensorFlow espera datos en formato de matriz. reshape(-1, 1) convierte el array [7 elementos] en una matriz de 7 filas × 1 columna, que es el formato estándar para problemas de regresión con una sola variable de entrada.

02. Arquitectura de la Red Neuronal

Diseñamos una red neuronal con 2 capas ocultas de 3 neuronas cada una. Cada neurona aprenderá una característica diferente de la relación temperatura:

1
Entrada
Valor Celsius
3
Capa Oculta 1
3 neuronas
3
Capa Oculta 2
3 neuronas
1
Salida
Predicción Fahrenheit
celsius_to_fahrenheit.py

# 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
])
                

🧠 ¿Por qué 2 capas ocultas?
Una sola capa podría aprender la relación lineal, pero 2 capas permiten que la red descubra patrones más complejos (aunque en este caso la relación es lineal). Es una práctica común en redes neuronales usar múltiples capas para mayor flexibilidad.

03. Compilación y Entrenamiento

Configuramos el optimizador Adam y la función de pérdida. Luego entrenamos la red durante 1000 épocas (pasadas completas por el dataset):

celsius_to_fahrenheit.py

# 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)
                

¿Qué ocurre durante el entrenamiento?
1. La red hace una predicción inicial (aleatoria)
2. Calcula el error vs el valor real
3. Ajusta sus pesos internos para reducir el error
4. Repite 1000 veces hasta que el error sea mínimo

Resultado: Pesos internos que transforman Celsius → Fahrenheit con precisión del 99.97% (sin conocer la fórmula matemática).

04. Predicción y Resultados

Una vez entrenada, la red puede predecir valores nunca vistos durante el entrenamiento:

celsius_to_fahrenheit.py

# 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
                

Entrada de prueba: 25°C
Predicción de la IA: 76.98°F
Valor real: 77.00°F
Error absoluto: 0.02°F (0.026%)

✅ La IA generalizó correctamente a un valor no visto

💡 Clave del aprendizaje automático: La IA no memorizó los 7 ejemplos. Aprendió el patrón subyacente y puede aplicarlo a nuevos datos. Esto es lo que diferencia a la IA de una simple tabla de búsqueda.

05. ¿Por qué es Inteligencia Artificial Real?

Esta red neuronal cumple con la definición académica de IA:

⚠️ No es "IA mágica": Es un modelo matemático que optimiza pesos para minimizar errores. El "aprendizaje" es un proceso de ajuste numérico, no comprensión humana. Pero es el fundamento de todas las IA modernas, desde asistentes hasta coches autónomos.

📥 Descarga mi código Python auténtico

Este es el código real que ejecuto en mi entorno local con TensorFlow. Funciona en cualquier instalación de Python 3.x con TensorFlow instalado.

⬇️ Descargar Script Python

Ejecuta con: pip install tensorflow numpy && python3 celsius_to_fahrenheit.py

← Volver al Portfolio