Crear una Red Neuronal que permite clasificar Imágenes de Ropa en distintas categorías usando IA con Tensorflow

Tiempo de lectura: 3 minutos

En este tutorial, te mostraré cómo crear una red neuronal de ejemplo utilizando Tensorflow y un dataset público. Para este ejemplo, vamos a crear una red neuronal que pueda clasificar imágenes de ropa en diferentes categorías.

Antes de empezar, necesitarás tener instalado Tensorflow en tu máquina. Puedes instalarlo utilizando el siguiente comando:

pip install tensorflow

Una vez que hayas instalado Tensorflow, podemos empezar a trabajar en nuestro ejemplo de red neuronal.

Paso 1: Cargar el dataset

Para nuestro ejemplo, utilizaremos el conjunto de datos Fashion-MNIST, que contiene 70,000 imágenes en escala de grises de ropa en 10 categorías diferentes. Puedes descargar el conjunto de datos de este enlace: https://github.com/zalandoresearch/fashion-mnist.

Una vez que hayas descargado el archivo .gz, tendrás que extraer los archivos .idx utilizando un programa de descompresión como 7-Zip.

Ahora, necesitamos cargar los datos en nuestro programa Python. Para ello, utilizaremos la biblioteca Numpy para leer los archivos .idx y convertirlos en matrices que podamos utilizar para entrenar nuestra red neuronal.

import numpy as np

# Cargar los datos de entrenamiento
with open('train-images-idx3-ubyte', 'rb') as f:
    train_images = np.frombuffer(f.read(), np.uint8, offset=16).reshape((-1, 28, 28, 1))

with open('train-labels-idx1-ubyte', 'rb') as f:
    train_labels = np.frombuffer(f.read(), np.uint8, offset=8)

# Cargar los datos de prueba
with open('t10k-images-idx3-ubyte', 'rb') as f:
    test_images = np.frombuffer(f.read(), np.uint8, offset=16).reshape((-1, 28, 28, 1))

with open('t10k-labels-idx1-ubyte', 'rb') as f:
    test_labels = np.frombuffer(f.read(), np.uint8, offset=8)

En este código, estamos abriendo los archivos .idx utilizando la función open de Python y leyendo los datos utilizando la función np.frombuffer de Numpy. Estamos utilizando la opción offset=16 para saltar los primeros 16 bytes de cada archivo, que contienen información de encabezado. Estamos también utilizando la función reshape para dar forma a las matrices de imágenes a una forma de 28×28 píxeles con un solo canal (escala de grises). Finalmente, estamos almacenando los datos en las variables train_images, train_labels, test_images y test_labels.

Paso 2: Preprocesamiento de datos

Antes de entrenar nuestra red neuronal, necesitamos realizar algunos pasos de preprocesamiento en los datos. En particular, necesitamos normalizar las imágenes para que todos los píxeles estén en el rango de 0 a 1.

# Normalizar los píxeles de las imágenes
train_images = train_images / 255.0
test_images = test_images / 255.0

En este código, estamos dividiendo cada valor de píxel por 255 para normalizarlos en el rango de 0 a 1.

preprocesado los datos, podemos crear nuestro modelo de red neuronal. Para nuestro ejemplo, utilizaremos una arquitectura simple de red neuronal convolucional (CNN) con dos capas convolucionales y dos capas densas.

import tensorflow as tf

# Crear el modelo de red neuronal
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10)
])

En este código, estamos utilizando la clase Sequential de Tensorflow para crear nuestro modelo de red neuronal. Estamos agregando dos capas convolucionales con filtros de tamaño 3×3 y funciones de activación ReLU. Después de cada capa convolucional, estamos utilizando una capa de agrupamiento de maxpooling con un tamaño de ventana de 2×2. Después de las capas convolucionales, estamos aplanando las matrices de características utilizando la capa Flatten y agregando dos capas densas con 128 y 10 unidades respectivamente. La capa densa final no tiene una función de activación ya que queremos que las salidas sean las puntuaciones de cada clase.

Paso 4: Compilar y entrenar el modelo

Una vez que hemos creado nuestro modelo de red neuronal, necesitamos compilarlo y entrenarlo con los datos de entrenamiento.

# Compilar el modelo
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

# Entrenar el modelo
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

En este código, estamos utilizando la función compile de Tensorflow para compilar nuestro modelo de red neuronal. Estamos utilizando el optimizador adam, la pérdida de entropía cruzada categórica escasa (SparseCategoricalCrossentropy) y la métrica de precisión (accuracy).

Después de compilar el modelo, estamos utilizando la función fit para entrenar nuestro modelo con los datos de entrenamiento. Estamos utilizando 10 épocas de entrenamiento y especificando los datos de prueba como datos de validación.

Paso 5: Evaluación del modelo

Después de entrenar nuestro modelo, podemos evaluar su rendimiento utilizando los datos de prueba.

# Evaluar el modelo
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Precisión de la prueba:', test_acc)

En este código, estamos utilizando la función evaluate de Tensorflow para evaluar nuestro modelo con los datos de prueba. Estamos imprimiendo la precisión de la prueba en la consola.

Paso 6: Predicción de nuevas imágenes

Finalmente, podemos utilizar nuestro modelo entrenado para hacer predicciones sobre nuevas imágenes de ropa.

# Hacer predicciones sobre nuevas imágenes
predictions = model.predict(test_images)

# Imprimir las predicciones de las primeras 5 imágenes
for i in range(5):
    print('Predicción:', np.argmax(predictions[i]))
    print('Etiqueta verdadera:', test_labels[i])

En este código, estamos utilizando la función predict de Tensorflow para hacer predicciones sobre las imágenes de prueba. Después, estamos iterando sobre las primeras 5 imágenes y mostrando la predicción del modelo y la etiqueta verdadera de la imagen en la consola.

Deja un comentario