Path: blob/master/site/es-419/datasets/tfless_tfds.ipynb
25115 views
Copyright 2023 The TensorFlow Datasets Authors.
TFDS para Jax y PyTorch
TFDS siempre ha sido independiente del framework. Por ejemplo, puede cargar fácilmente conjuntos de datos en formato NumPy para utilizarlos en Jax y PyTorch.
TensorFlow y su solución de carga de datos ( tf.data
) son ciudadanos de primera clase en nuestra API por diseño.
Hemos extendido TFDS para soportar la carga de datos sólo NumPy sin TensorFlow. Esto puede ser conveniente para el uso en marcos de ML como Jax y PyTorch. De hecho, para estos últimos usuarios, TensorFlow puede:
Reservar memoria GPU/TPU;
Aumentar el tiempo de compilación en CI/CD;
Tardan en importarse en tiempo de ejecución.
TensorFlow ya no es una dependencia para leer conjuntos de datos.
Las tuberías de aprendizaje automático necesitan un cargador de datos para cargar ejemplos, descodificarlos y presentarlos al modelo. Los cargadores de datos utilizan el paradigma "fuente/muestreador/cargador":
La fuente de datos es responsable de acceder y decodificar ejemplos de un conjunto de datos TFDS sobre la marcha.
El muestreador de índices es responsable de determinar el orden en que se procesan los registros. Esto es importante para implementar transformaciones globales (por ejemplo, barajado global, fragmentación, repetición para múltiples épocas) antes de leer cualquier registro.
El cargador de datos orquesta la carga aprovechando la fuente de datos y el muestreador de índices. Permite optimizar el rendimiento (por ejemplo, precarga, multiprocesamiento o multihilo).
TL;DR
tfds.data_source
es una API para crear fuentes de datos:
Para la creación rápida de prototipos en tuberías puramente de Python
Para gestionar procesos de aprendizaje automático con gran cantidad de datos a gran escala.
Instalación
Vamos a instalar e importar las dependencias necesarias:
Fuentes de datos
Las fuentes de datos son básicamente secuencias de Python. Entonces necesitan implementar el siguiente protocolo:
Advertencia: la API todavía está en desarrollo continuo. En particular, en este momento, __getitem__
debe soportar tanto int
como list[int]
en la entrada. En el futuro, probablemente sólo soportará int
según el estándar.
El formato de archivo subyacente debe permitir un acceso aleatorio eficaz. Actualmente, TFDS depende de array_record
.
array_record
es un nuevo formato de archivo derivado de Riegeli, que alcanza una nueva frontera de eficiencia de E/S. En concreto, ArrayRecord admite la lectura, escritura y acceso aleatorio en paralelo por índice de registro. ArrayRecord se basa en Riegeli y admite los mismos algoritmos de compresión.
fashion_mnist
es un conjunto de datos habitual para la visión por ordenador. Para recuperar una fuente de datos basada en ArrayRecord con TFDS, basta con utilizar:
tfds.data_source
es un contenedor conveniente. es equivalente a:
Esto genera un diccionario de fuentes de datos:
Una vez que download_and_prepare
se ha ejecutado, y has generado los archivos de registro, ya no necesitamos TensorFlow. ¡Todo se hará en Python/NumPy!
Verifiquemos esto desinstalando TensorFlow y volviendo a cargar la fuente de datos en otro subproceso:
En futuras versiones, también vamos a hacer que la preparación del conjunto de datos sea independiente de TensorFlow.
Una fuente de datos tiene una longitud:
Accediendo al primer elemento del conjunto de datos:
...es tan barato como acceder a cualquier otro elemento. Esta es la definición de acceso aleatorio:
Las funciones ahora utilizan NumPy DTypes (en lugar de TensorFlow DTypes). Puede inspeccionar las características con:
Encontrará más información sobre las funciones en nuestra documentación. Aquí podemos recuperar notablemente la forma de las imágenes, y el número de clases:
Uso en Python puro
Puedes utilizar fuentes de datos en Python iterando sobre ellas:
Si inspeccionas los elementos, también notarás que todas las características ya están decodificadas usando NumPy. Entre bastidores, utilizamos OpenCV por defecto porque es rápido. Si no tienes OpenCV instalado, usamos por defecto Pillow para proporcionar una decodificación de imágenes ligera y rápida.
{Nota: Actualmente, la función sólo está disponible para las funciones Tensor
, Image
y Scalar
. Las funciones Audio
y Video
estarán disponibles próximamente. Permanece atento.
Uso con PyTorch
PyTorch utiliza el paradigma fuente/muestreador/cargador. En Torch, las "fuentes de datos" se llaman " datasets". torch.utils.data
contiene todos los detalles que necesita saber para construir tuberías de entrada eficientes en Torch.
Las fuentes de datos TFDS pueden utilizarse como conjuntos de datos tipo mapa normales.
Primero instalamos e importamos Torch:
Ya hemos definido las fuentes de datos para entrenamiento y prueba (respectivamente, ds['train']
y ds['test']
). Ahora podemos definir el muestreador y los cargadores:
Utilizando PyTorch, entrenamos y evaluamos una regresión logística simple en los primeros ejemplos:
Próximamente: uso con JAX
Estamos trabajando estrechamente con Grain. Grain es un cargador de datos de código abierto, rápido y determinista para Python. Estén al tanto.
Más información
Para obtener más información, consulte tfds.data_source
API doc.