En aquest tema, aprendrem com carregar dades en TensorFlow, una habilitat fonamental per a qualsevol projecte de machine learning. TensorFlow proporciona diverses eines i mètodes per gestionar i carregar dades de manera eficient. Explorarem les següents àrees:

  1. Carregant dades des de fitxers CSV
  2. Carregant dades des de fitxers d'imatge
  3. Carregant dades des de fitxers TFRecord
  4. Utilitzant tf.data.Dataset per gestionar dades

  1. Carregant dades des de fitxers CSV

Els fitxers CSV són un format comú per emmagatzemar dades tabulars. TensorFlow ofereix funcions per carregar i processar aquests fitxers fàcilment.

Exemple pràctic: Carregar un fitxer CSV

import tensorflow as tf

# Definim el camí del fitxer CSV
csv_file_path = 'path/to/your/file.csv'

# Utilitzem tf.data.experimental.make_csv_dataset per carregar el fitxer CSV
dataset = tf.data.experimental.make_csv_dataset(
    csv_file_path,
    batch_size=32,  # Nombre de mostres per batch
    label_name='target_column',  # Nom de la columna objectiu
    na_value="?",  # Valor per a les dades mancants
    num_epochs=1,  # Nombre d'èpoques
    ignore_errors=True  # Ignorar errors durant la lectura
)

# Mostrem algunes mostres del dataset
for features, label in dataset.take(1):
    print("Features:", features)
    print("Label:", label)

Explicació del codi

  • tf.data.experimental.make_csv_dataset: Aquesta funció llegeix un fitxer CSV i el converteix en un tf.data.Dataset.
  • batch_size: Defineix el nombre de mostres per batch.
  • label_name: El nom de la columna que conté les etiquetes.
  • na_value: El valor que representa dades mancants.
  • num_epochs: El nombre de vegades que el dataset serà iterat.
  • ignore_errors: Si es True, ignora els errors durant la lectura del fitxer.

  1. Carregant dades des de fitxers d'imatge

TensorFlow també facilita la càrrega d'imatges des de directoris. Utilitzarem tf.keras.preprocessing.image_dataset_from_directory per carregar imatges.

Exemple pràctic: Carregar imatges des d'un directori

import tensorflow as tf

# Definim el camí del directori d'imatges
image_directory = 'path/to/your/image_directory'

# Utilitzem image_dataset_from_directory per carregar les imatges
dataset = tf.keras.preprocessing.image_dataset_from_directory(
    image_directory,
    batch_size=32,  # Nombre d'imatges per batch
    image_size=(256, 256),  # Mida de les imatges
    label_mode='int'  # Mode d'etiquetatge (int, categorical, None)
)

# Mostrem algunes imatges del dataset
import matplotlib.pyplot as plt

for images, labels in dataset.take(1):
    plt.figure(figsize=(10, 10))
    for i in range(9):
        ax = plt.subplot(3, 3, i + 1)
        plt.imshow(images[i].numpy().astype("uint8"))
        plt.title(int(labels[i]))
        plt.axis("off")
    plt.show()

Explicació del codi

  • tf.keras.preprocessing.image_dataset_from_directory: Aquesta funció llegeix imatges d'un directori i les converteix en un tf.data.Dataset.
  • batch_size: Defineix el nombre d'imatges per batch.
  • image_size: Defineix la mida de les imatges.
  • label_mode: Defineix el mode d'etiquetatge (int, categorical, None).

  1. Carregant dades des de fitxers TFRecord

Els fitxers TFRecord són un format binari eficient per emmagatzemar dades. Són especialment útils per a datasets grans.

Exemple pràctic: Carregar un fitxer TFRecord

import tensorflow as tf

# Definim el camí del fitxer TFRecord
tfrecord_file_path = 'path/to/your/file.tfrecord'

# Definim una funció per parsejar els exemples
def _parse_function(proto):
    # Definim les característiques
    feature_description = {
        'feature1': tf.io.FixedLenFeature([], tf.float32),
        'feature2': tf.io.FixedLenFeature([], tf.int64),
        'label': tf.io.FixedLenFeature([], tf.int64),
    }
    return tf.io.parse_single_example(proto, feature_description)

# Utilitzem tf.data.TFRecordDataset per carregar el fitxer TFRecord
dataset = tf.data.TFRecordDataset(tfrecord_file_path)
dataset = dataset.map(_parse_function)

# Mostrem algunes mostres del dataset
for record in dataset.take(1):
    print(record)

Explicació del codi

  • tf.data.TFRecordDataset: Aquesta funció llegeix un fitxer TFRecord i el converteix en un tf.data.Dataset.
  • _parse_function: Una funció per parsejar els exemples del fitxer TFRecord.
  • tf.io.parse_single_example: Aquesta funció parseja un sol exemple del fitxer TFRecord.

  1. Utilitzant tf.data.Dataset per gestionar dades

El mòdul tf.data proporciona una API potent per construir pipelines de dades eficients.

Exemple pràctic: Crear un pipeline de dades

import tensorflow as tf

# Definim una llista de dades
data = [1, 2, 3, 4, 5]

# Convertim la llista en un tf.data.Dataset
dataset = tf.data.Dataset.from_tensor_slices(data)

# Apliquem transformacions al dataset
dataset = dataset.map(lambda x: x * 2)
dataset = dataset.batch(2)

# Mostrem algunes mostres del dataset
for batch in dataset:
    print(batch)

Explicació del codi

  • tf.data.Dataset.from_tensor_slices: Aquesta funció converteix una llista en un tf.data.Dataset.
  • map: Aplica una transformació a cada element del dataset.
  • batch: Agrupa els elements del dataset en batches.

Resum

En aquest tema, hem après com carregar dades en TensorFlow utilitzant diferents mètodes i formats, incloent fitxers CSV, imatges, fitxers TFRecord i el mòdul tf.data.Dataset. Aquests coneixements són essencials per gestionar dades de manera eficient en projectes de machine learning. En el proper tema, explorarem com crear pipelines de dades amb tf.data.

© Copyright 2024. Tots els drets reservats