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.
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.