DatiLab - Laboratorio de datos

Tutorial: Clasificación de Imágenes con TensorFlow paso a paso

Publicado el 30 de mayo de 2026

#TensorFlow,Clasificación de Imágenes,Inteligencia Artificial,Machine Learning,Python,Deep Learning,Redes Neuronales
Tutorial: Clasificación de Imágenes con TensorFlow paso a paso

Introducción a la Clasificación de Imágenes con TensorFlow

La inteligencia artificial está transformando industrias en todo el mundo, y Colombia no es la excepción. Según el Ministerio de Tecnologías de la Información y las Comunicaciones (MinTIC), el país ha incrementado significativamente su inversión en formación tecnológica, con miles de desarrolladores colombianos adoptando herramientas de machine learning cada año. En este contexto, aprender a clasificar imágenes con TensorFlow se ha convertido en una habilidad fundamental para cualquier programador que quiera mantenerse competitivo en el mercado laboral actual.

TensorFlow, la biblioteca de código abierto desarrollada por Google, es una de las herramientas más poderosas y populares para construir modelos de aprendizaje profundo. En este tutorial completo, aprenderás desde los conceptos básicos hasta la implementación práctica de un clasificador de imágenes funcional, con ejemplos de código listos para usar.

¿Qué es la Clasificación de Imágenes?

La clasificación de imágenes es una tarea de visión por computadora en la que un modelo de machine learning analiza una imagen y la asigna a una o varias categorías predefinidas. Por ejemplo, un sistema puede determinar si una fotografía contiene un gato, un perro, o un automóvil.

Esta tecnología tiene aplicaciones enormes en el contexto colombiano:

  • Sector agrícola: Detección de enfermedades en cultivos de café, banano o flores, productos clave de la economía colombiana.
  • Salud: Análisis de imágenes médicas para diagnóstico temprano en hospitales y clínicas.
  • Seguridad: Sistemas de vigilancia inteligente para ciudades como Bogotá, Medellín y Cali.
  • Retail y e-commerce: Búsqueda visual de productos en plataformas de comercio electrónico.
  • Fintech: Verificación de documentos de identidad para procesos KYC en empresas financieras.

Requisitos Previos

Antes de comenzar, asegúrate de tener instalado lo siguiente en tu entorno de desarrollo:

  • Python 3.8 o superior
  • TensorFlow 2.x
  • NumPy
  • Matplotlib
  • Jupyter Notebook (opcional pero recomendado)

Puedes instalar todas las dependencias necesarias con el siguiente comando:

pip install tensorflow numpy matplotlib jupyter

Paso 1: Preparación del Entorno y Carga de Datos

Para este tutorial utilizaremos el dataset CIFAR-10, un conjunto de datos ampliamente usado en la comunidad de machine learning que contiene 60,000 imágenes de 32x32 píxeles distribuidas en 10 clases: aviones, automóviles, pájaros, gatos, ciervos, perros, ranas, caballos, barcos y camiones.

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

# Cargar el dataset CIFAR-10
(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()

# Normalizar los valores de píxeles entre 0 y 1
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

print(f'Forma del conjunto de entrenamiento: {x_train.shape}')
print(f'Forma del conjunto de prueba: {x_test.shape}')

La normalización de los datos es un paso crítico. Al dividir los valores de píxeles (que van de 0 a 255) entre 255, obtenemos valores entre 0 y 1, lo que facilita el proceso de entrenamiento y mejora la convergencia del modelo.

Paso 2: Exploración y Visualización de los Datos

Antes de construir el modelo, es fundamental entender los datos con los que trabajamos. Una buena práctica es visualizar algunas imágenes del dataset:

class_names = ['avión', 'automóvil', 'pájaro', 'gato', 'ciervo',
               'perro', 'rana', 'caballo', 'barco', 'camión']

plt.figure(figsize=(10, 10))
for i in range(25):
    plt.subplot(5, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(x_train[i])
    plt.xlabel(class_names[y_train[i][0]])
plt.show()

Paso 3: Construcción del Modelo CNN

Las Redes Neuronales Convolucionales (CNN, por sus siglas en inglés) son la arquitectura estándar para tareas de visión por computadora. Su capacidad para detectar patrones espaciales en imágenes las hace ideales para la clasificación.

model = keras.Sequential([
    # Primera capa convolucional
    keras.layers.Conv2D(32, (3, 3), activation='relu', 
                        input_shape=(32, 32, 3)),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Dropout(0.25),
    
    # Segunda capa convolucional
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Dropout(0.25),
    
    # Tercera capa convolucional
    keras.layers.Conv2D(128, (3, 3), activation='relu'),
    keras.layers.BatchNormalization(),
    keras.layers.Dropout(0.25),
    
    # Capas densas
    keras.layers.Flatten(),
    keras.layers.Dense(512, activation='relu'),
    keras.layers.BatchNormalization(),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(10, activation='softmax')
])

model.summary()

Entendiendo la Arquitectura

Cada componente de esta arquitectura cumple una función específica:

  • Conv2D: Extrae características locales de la imagen mediante filtros convolucionales.
  • BatchNormalization: Normaliza las activaciones, acelerando el entrenamiento y reduciendo la sensibilidad a la inicialización de pesos.
  • MaxPooling2D: Reduce la dimensionalidad espacial, haciendo el modelo más eficiente.
  • Dropout: Técnica de regularización que previene el sobreajuste (overfitting).
  • Dense: Capas completamente conectadas para la clasificación final.
  • Softmax: Convierte las salidas en probabilidades para cada clase.

Paso 4: Compilación y Entrenamiento del Modelo

Con la arquitectura definida, el siguiente paso es compilar el modelo especificando el optimizador, la función de pérdida y las métricas de evaluación:

# Compilar el modelo
model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# Configurar callbacks para mejorar el entrenamiento
callbacks = [
    keras.callbacks.EarlyStopping(
        monitor='val_accuracy',
        patience=10,
        restore_best_weights=True
    ),
    keras.callbacks.ReduceLROnPlateau(
        monitor='val_loss',
        factor=0.5,
        patience=5,
        min_lr=1e-6
    )
]

# Entrenar el modelo
history = model.fit(
    x_train, y_train,
    batch_size=64,
    epochs=50,
    validation_split=0.2,
    callbacks=callbacks,
    verbose=1
)

Paso 5: Evaluación y Visualización de Resultados

Una vez entrenado el modelo, es esencial evaluar su rendimiento tanto en los datos de entrenamiento como en los de prueba:

# Evaluar en el conjunto de prueba
test_loss, test_accuracy = model.evaluate(x_test, y_test, verbose=0)
print(f'Precisión en prueba: {test_accuracy:.4f}')
print(f'Pérdida en prueba: {test_loss:.4f}')

# Visualizar el historial de entrenamiento
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

ax1.plot(history.history['accuracy'], label='Entrenamiento')
ax1.plot(history.history['val_accuracy'], label='Validación')
ax1.set_title('Precisión del Modelo')
ax1.set_xlabel('Época')
ax1.set_ylabel('Precisión')
ax1.legend()

ax2.plot(history.history['loss'], label='Entrenamiento')
ax2.plot(history.history['val_loss'], label='Validación')
ax2.set_title('Pérdida del Modelo')
ax2.set_xlabel('Época')
ax2.set_ylabel('Pérdida')
ax2.legend()

plt.tight_layout()
plt.show()

Paso 6: Realizar Predicciones

Con el modelo entrenado, podemos realizar predicciones sobre nuevas imágenes:

# Realizar predicciones
predictions = model.predict(x_test)

# Función para visualizar predicciones
def plot_prediction(index):
    img = x_test[index]
    true_label = class_names[y_test[index][0]]
    pred_label = class_names[np.argmax(predictions[index])]
    confidence = np.max(predictions[index]) * 100
    
    plt.figure(figsize=(4, 4))
    plt.imshow(img)
    color = 'green' if true_label == pred_label else 'red'
    plt.title(f'Real: {true_label}\nPredicción: {pred_label} ({confidence:.1f}%)',
              color=color)
    plt.axis('off')
    plt.show()

# Visualizar algunas predicciones
for i in range(5):
    plot_prediction(i)

Técnicas Avanzadas: Transfer Learning

Para proyectos del mundo real en Colombia, especialmente en startups de tecnología o empresas que están comenzando con IA, el Transfer Learning es una técnica invaluable. Permite aprovechar modelos preentrenados en millones de imágenes para obtener excelentes resultados con menos datos y tiempo de entrenamiento:

# Usar MobileNetV2 como base preentrenada
base_model = keras.applications.MobileNetV2(
    input_shape=(224, 224, 3),
    include_top=False,
    weights='imagenet'
)

base_model.trainable = False

# Agregar capas personalizadas
model_transfer = keras.Sequential([
    base_model,
    keras.layers.GlobalAveragePooling2D(),
    keras.layers.Dense(256, activation='relu'),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(10, activation='softmax')
])

Aplicaciones Prácticas en el Ecosistema Tecnológico Colombiano

El ecosistema de startups tecnológicas en Colombia, especialmente en ciudades como Medellín (reconocida internacionalmente como ciudad de innovación) y Bogotá, está adoptando rápidamente estas tecnologías. Empresas colombianas están usando clasificación de imágenes para:

  • Agricultura de precisión: Startups como las del Hub de Innovación de Rionegro están desarrollando soluciones para detectar plagas en cultivos mediante drones equipados con cámaras.
  • Telemedicina: Con el auge de la salud digital post-pandemia, clínicas colombianas están explorando el análisis automático de radiografías y dermoscopías.
  • Logística y transporte: Empresas de mensajería están implementando reconocimiento de paquetes y documentos para automatizar procesos.
  • Turismo: Aplicaciones que identifican sitios turísticos colombianos a través de fotografías, potenciando el sector.

Preguntas Frecuentes (FAQ)

¿Necesito una GPU potente para entrenar modelos con TensorFlow?

No necesariamente. Para comenzar a aprender y experimentar, una CPU moderna es suficiente. Sin embargo, para proyectos más grandes, puedes usar Google Colab de forma gratuita, que ofrece acceso a GPUs y TPUs. En Colombia, también existen servicios cloud como AWS, Google Cloud y Azure con centros de datos en Latinoamérica que ofrecen recursos de cómputo accesibles.

¿Cuántos datos necesito para entrenar un clasificador de imágenes?

Con Transfer Learning, puedes obtener buenos resultados con tan solo 100-500 imágenes por clase. Sin Transfer Learning, generalmente necesitas miles de imágenes por categoría. Para proyectos colombianos específicos, como clasificar variedades de café o flores de exportación, el Transfer Learning es la opción más práctica.

¿TensorFlow es la mejor opción para clasificación de imágenes?

TensorFlow es excelente, pero PyTorch también es muy popular en la comunidad investigadora. Para producción y despliegue en aplicaciones móviles o web, TensorFlow tiene ventajas con TensorFlow Lite y TensorFlow.js. La elección depende del caso de uso específico.

¿Cómo puedo desplegar mi modelo en producción?

TensorFlow ofrece varias opciones: TensorFlow Serving para APIs REST, TensorFlow Lite para dispositivos móviles y embebidos, y TensorFlow.js para aplicaciones web. En Colombia, muchas empresas optan por desplegar sus modelos en contenedores Docker sobre plataformas cloud.

¿Existen recursos de formación en IA disponibles en Colombia?

Sí. El programa MinTIC ofrece cursos de inteligencia artificial, y plataformas como Coursera, Platzi y edX tienen contenido en español. Universidades como los Andes, EAFIT y la Nacional también ofrecen programas especializados en ciencia de datos e IA.

Conclusión

La clasificación de imágenes con TensorFlow es una habilidad poderosa que abre las puertas a innumerables aplicaciones en el mundo real. A lo largo de este tutorial, hemos cubierto desde la preparación de datos hasta la construcción, entrenamiento y evaluación de un modelo CNN completo, incluyendo técnicas avanzadas como Transfer Learning. Para los desarrolladores colombianos, dominar estas tecnologías representa una ventaja competitiva significativa en un mercado laboral que demanda cada vez más profesionales con conocimientos en IA y machine learning. Te invitamos a experimentar con el código presentado, adaptarlo a casos de uso locales y compartir tus resultados con la comunidad. ¿Ya implementaste un clasificador de imágenes en algún proyecto? ¡Cuéntanos tu experiencia en los comentarios y ayuda a crecer el ecosistema tecnológico colombiano!

📩 Contacto

Hablemos de tu próximo proyecto

¿Listo para llevar tu negocio al siguiente nivel?. Completa el formulario y te contactaremos en unas horas.

Teléfono

+57 321 557 7073

Ubicación

Bogotá, Colombia

Envíanos un mensaje

Al enviar este formulario, aceptas nuestra política de privacidad.