Un procedimiento común para gestionar los datos de una o varias fuentes en un sistema objetivo incluye tres pasos: extraer, transformar y cargar (ETL).
- Extraer los datos en bruto de múltiples fuentes, incluidos los discos locales o los sistemas distribuidos
- Transformar los datos para analizarlos, preprocesarlos, aumentarlos, mezclarlos y agruparlos.
- Cargar los datos transformados en GPU o TPU para ejecutar el entrenamiento y la inferencia del modelo ML.
La siguiente imagen ilustra el conducto de datos de clasificación de imágenes.
Creación de registros TF
Una vez que descargue las imágenes, verá 5 lotes de imágenes de entrenamiento y 1 lote de imágenes de prueba, como se muestra en esta captura de pantalla.
Un lote de datos es una matriz de 10.000 x 3.072 expresada en una matriz numérica. Denota 10.000 muestras de imágenes que tienen un tamaño de 32 x 32 píxeles cada una. Remodele el vector de la fila como se muestra a continuación, esperado por Tensorflow como (ancho, alto, num_canal). Esto puede ser consumido por el API del conjunto de datos de Tensorflow.
Crear los conjuntos de datos usando objetos en memoria
Hemos utilizado la API tf.data.Dataset.from_tensor_slices() para crear conjuntos de datos a partir de tensores en memoria. Esta API construye un conjunto de datos cortando la primera dimensión del tensor en características y etiquetas.
12 train_set = tf.data.Dataset.from_tensor_slices((x_train, y_train)).map(data_aug,num_parallel_calls=tf.data.experimental.AUTOTUNE). shuffle(len_train).batch(BATCH_SIZE).prefetch(1) test_set = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(BATCH_SIZE)
pitón
Transformar los conjuntos de datos
Una vez que los objetos del conjunto de datos han sido creados, necesitan ser transformados para el consumo del modelo ML. La transformación incluye la reorganización de los datos, la limpieza de los mismos y la normalización y estandarización de los datos. Estandarizar las características (en este caso, los valores de los píxeles) para que la media sea igual a cero y la desviación estándar sea 1. Esto hace que nuestras características se encuentren en una distribución gaussiana. La normalización de los datos reajusta las características a un rango específico de 0 a la media de las características.
123456train_mean = np.mean(x_train, axis=(0,1,2))train_std = np.std(x_train, axis=(0,1,2))normalize =lambda x:((x - train_mean)/ train_std).astype($0027float32$0027)# Add Paddingx_train = normalize(pad4(x_train))x_test = normalize(x_test)
pitón
A continuación, aumente los datos para el tamaño de 32 x 32 píxeles.
1data_aug =lambda x, y:(tf.image.random_flip_left_right(tf.image.random_crop(x,[32,32,3])), y)
pitón
Los datos se transforman en línea usando tf.data.Dataset.map(). Esto es muy similar al Dataframe.apply() de los pandas. Esta API toma una función y la aplica a cada elemento del conjunto de datos. Toma un objeto tf.Tensor y devuelve un objeto tf.Tensor recién transformado.
Prefetch Data
La API prefetch() recoge el siguiente lote que se cargará en la tubería de entrada mientras el lote actual es servido por el modelo ML.