La división de datos en Deep Learning

| Última modificación: 8 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

La división de datos en Deep Learning es uno de los saberes más importantes para trabajar con las redes neuronales en este campo tan amplio dentro del manejo de los macrodatos. Por esta razón, en este post, te explicamos qué es y cómo funciona la división de datos en Deep Learning.

División de datos en Deep Learning

En general, la división de datos en Deep Learning se produce debido a que los algoritmos de Machine Learning aprenden de los datos con los que los entrenamos. A partir de ellos, intentan encontrar o inferir el patrón que les permita predecir el resultado para un nuevo caso. Pero, para poder calibrar si un modelo funciona, necesitaremos probarlo con un conjunto de datos diferente.

¿Qué pasaría si entrenamos y validamos el modelo con los mismos datos? Tendríamos unos muy buenos resultados en la validación, pero ¿el modelo sería capaz de generalizar tan bien?

Por tanto, en todo proceso de aprendizaje automático, los datos se deben dividir en tres partes: datos de entrenamiento, datos de validación y datos test.

  • Entrenamiento: se utilizan para actualizar los pesos cada batch.
  • Validación: comprueba la capacidad de generalización de la red en cada época. Prueba con muestras que no ha visto durante el entrenamiento y sirve para monitorizar el entrenamiento de la red a titulo informativo, pero no interviene en ningún cálculo. Suele emplearse cuando se quieren ajustar los parámetros, siendo este conjunto el que indica qué parámetros es mejor utilizar. A más precisión en validación, mejor set de parámetros tenemos. Por este motivo, no podemos confiar en este resultado para hacernos una idea de la capacidad de generalización de la red, porque hemos elegido la configuración de la red para que nos dé una precisión más alta. Por tanto, debemos tener un conjunto extra que nos permita, ahora sí, decir si nuestra red es buena con muestras que no haya visto nunca o no: el de test.
  • Test: nos da una intuición de lo buena que es nuestra red al generalizar con un conjunto (más grande que el de validación) nunca visto.

Veamos las proporciones que se suelen utilizar de cada tipo en la división de datos en Deep Learning:

Para las implementaciones de las redes neuronales que vamos a realizar, vamos a trabajar con el set de datos MNIST. El set de datos MNIST es un conjunto de 70000 imágenes de 28×28 píxeles que contienen números manuscritos junto con la etiqueta solución del número codificado (nuestro ground truth). Cabe destacar que, por convención, MNIST dispone de una división específica en conjuntos de entrenamiento, validación y test.

A continuación, vamos a cargar los datos y a visualizar las particiones llevadas a cabo:

# Seleccionamos la version 1.x de TF
%tensorflow_version 1.x

TensorFlow 1.x selected.

# Imports necesarios
import numpy as np
import tensorflow as tf
print(tf.__version__)
import matplotlib.pyplot as plt

# Importamos el dataset MNIST y cargamos los datos
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

# Comprobar el tamaño del dataset
print("El conjunto de entrenamiento tiene dimensiones: ", mnist.train.images.shape)
print("El conjunto de validación tiene dimensiones: ",mnist.validation.images.shape)
print("El conjunto de test tiene dimensiones: ",mnist.test.images.shape)

# Método para visualizar los datos de entrenamiento
def display_digit(num):
  # Seleccionar la imagen num de mnist.train.images y hacer un reshape al tamaño de la imagen
  image = mnist.train.images[num,:].reshape([28,28]) #(X)
  # Seleccionar el target num de mnist.train.labels (Recuerda que esta en one-hot encoding, conviertelo a decimal con argmax)
  label = mnist.train.labels[num,:].argmax(axis=0) #(X)
  # Mostrar
  plt.title('Example: %d  Label: %d' % (num, label))
  plt.imshow(image, cmap=plt.get_cmap('gray_r'))
  plt.show()

# Mostramos algunos ejemplos
display_digit(np.random.randint(0, mnist.train.images.shape[0]))
display_digit(np.random.randint(0, mnist.train.images.shape[0]))
display_digit(np.random.randint(0, mnist.train.images.shape[0]))

En este post, te hemos expuesto la división de datos en Deep Learning, sin embargo, si quieres aprender más sobre el manejo Big Data, todavía queda un largo camino por recorrer.

Por ello, te aconsejamos que te apuntes a nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, una formación intensiva en la que aprenderás mucho más sobre las principales herramientas del Big Data de la mano de grandes profesionales. 

Además, podrás conocer los procesos completos de ingesta, clasificación, resguardo, procesamiento y presentación de los datos utilizando diferentes herramientas y lenguajes del ecosistema del Big Data. ¡Matricúlate ya!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado