Comienza a usar el algoritmo integrado de TabNet en VertexAI.

Descripción general

TabNet es una arquitectura de aprendizaje profundo que se puede interpretar para datos tabulares (estructurados). Combina lo mejor de dos mundos: tiene la explicabilidad de modelos más simples basados en árboles y, al mismo tiempo, logra la precisión alta de modelos y ensambles de caja negra. Esto hace que TabNet sea ideal para una gran variedad de tareas de datos tabulares, como la predicción de precios de activos financieros, la detección de fraudes/ataques cibernéticos/crímenes, la previsión de la demanda minorista, el diagnóstico de registros de atención médica, recomendaciones de productos y otras aplicaciones.

TabNet usa una capa con un diseño especial en la arquitectura: la atención secuencial, que selecciona los atributos del modelo del que se basará en cada paso del modelo. Este mecanismo permite explicar cómo el modelo llega a sus predicciones y lo ayuda a aprender modelos más precisos. Gracias a este diseño, TabNet no solo tiene mejor rendimiento que otras redes neuronales y árboles de decisión, sino que también proporciona atribuciones de atributos interpretables.

Datos de entrada

TabNet espera entradas tabulares en uno de los siguientes formatos:

  • Datos de entrenamiento: datos de etiquetas que se usan para entrenar el modelo. Los siguientes son formatos de archivo compatibles:
  • Esquema de entrada:
    • Si la entrada es csv, la primera columna será la variable de destino.
    • Si la entrada es BigQuery, debes especificar el parámetro target_column.

Prepara el archivo CSV

Tus datos de entrada deben estar en un archivo CSV con codificación UTF-8. Si tus datos de entrenamiento solo consisten en valores categóricos y numéricos, puedes usar el módulo de procesamiento previo para completar los valores numéricos que faltan, dividir el conjunto de datos y quitar filas con más del 10% de los valores faltantes. De lo contrario, puedes ejecutar el entrenamiento sin el procesamiento previo automático habilitado. En el archivo CSV, la primera columna es la variable de destino. Si el archivo CVS tiene el encabezado, debes especificar el parámetro has_header.

Prepara el conjunto de datos de BigQuery

Tu entrada puede ser un conjunto de datos de BigQuery. Existen varios métodos para cargar los datos de entrada en BigQuery.

Capacitación

Para realizar el entrenamiento de un solo nodo con TabNet, usa el siguiente comando. Con este comando, se crea un recurso CustomJob que usa una sola máquina de CPU. Para obtener información sobre las marcas que puedes usar durante el entrenamiento, consulta la sección Marcas en esta página.

Entrenamiento con entrada CSV

A continuación, se muestra un ejemplo del uso de CSV como el formato de entrada. Luego de entrenar tu modelo con éxito, te recomendamos optimizar los hiperparámetros que se usaron durante el entrenamiento para mejorar la exactitud y el rendimiento de tu modelo. El notebook de instructivo proporciona un ejemplo de trabajos de entrenamiento de hiperparámetros.

# URI of the TabNet Docker image.
LEARNER_IMAGE_URI='us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/tab_net_v2'

# The region to run the job in.
REGION='us-central1'

# Your project.
PROJECT_ID="[your-project-id]"

# Set the training data
DATASET_NAME="petfinder"  # Change to your dataset name.
IMPORT_FILE="petfinder-tabular-classification-tabnet-with-header.csv"
MODEL_TYPE="classification"

# Give a unique name to your training job.
DATE="$(date '+%Y%m%d_%H%M%S')"

# Set a unique name for the job to run.
JOB_NAME="tab_net_cpu_${DATASET_NAME}_${DATE}"
echo $JOB_NAME

# Define your bucket.
YOUR_BUCKET_NAME="gs://[your-bucket-name]" # Replace by your bucket name

# Copy the csv to your bucket.
TRAINING_DATA_PATH="${YOUR_BUCKET_NAME}/data/${DATASET_NAME}/train.csv"
gsutil cp gs://cloud-samples-data/ai-platform-unified/datasets/tabular/${IMPORT_FILE} TRAINING_DATA_PATH

# Set a location for the output.
OUTPUT_DIR="${YOUR_BUCKET_NAME}/${JOB_NAME}/"

echo $OUTPUT_DIR
echo $JOB_NAME

gcloud ai custom-jobs create \
  --region=${REGION} \
  --display-name=${JOB_NAME} \
  --worker-pool-spec=machine-type=n1-standard-8,replica-count=1,container-image-uri=${LEARNER_IMAGE_URI} \
  --args=--preprocess \
  --args=--model_type=${MODEL_TYPE} \
  --args=--data_has_header \
  --args=--training_data_path=${TRAINING_DATA_PATH} \
  --args=--job-dir=${OUTPUT_DIR} \
  --args=--max_steps=2000 \
  --args=--batch_size=4096 \
  --args=--learning_rate=0.01

Entrena con entradas de BigQuery

A continuación, se muestra un ejemplo del uso de BigQuery como la entrada.

# URI of the TabNet Docker image.
LEARNER_IMAGE_URI='us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/tab_net_v2'

# The region to run the job in.
REGION='us-central1'

# Your project.
PROJECT_ID="[your-project-id]"

# Set the training data
DATASET_NAME="petfinder"  # Change to your dataset name.
IMPORT_FILE="petfinder-tabular-classification-tabnet-with-header.csv"

# Give a unique name to your training job.
DATE="$(date '+%Y%m%d_%H%M%S')"

# Set a unique name for the job to run.
JOB_NAME="tab_net_cpu_${DATASET_NAME}_${DATE}"
echo $JOB_NAME

# Define your bucket.
YOUR_BUCKET_NAME="gs://[your-bucket-name]" # Replace by your bucket name

# Copy the csv to your bucket.
TRAINING_DATA_PATH="${YOUR_BUCKET_NAME}/data/${DATASET_NAME}/train.csv"
gsutil cp gs://cloud-samples-data/ai-platform-unified/datasets/tabular/${IMPORT_FILE} TRAINING_DATA_PATH

# Create BigQuery dataset.
bq --location=${REGION} mk --dataset ${PROJECT_ID}:${DATASET_NAME}

# Create BigQuery table using CSV file.
TABLE_NAME="train"
bq --location=${REGION} load --source_format=CSV --autodetect ${PROJECT_ID}:${DATASET_NAME}.${TABLE_NAME} ${YOUR_BUCKET_NAME}/data/petfinder/train.csv

# Set a location for the output.
OUTPUT_DIR="${YOUR_BUCKET_NAME}/${JOB_NAME}/"
echo $OUTPUT_DIR
echo $JOB_NAME

gcloud ai custom-jobs create \
  --region=${REGION} \
  --display-name=${JOB_NAME} \
  --worker-pool-spec=machine-type=n1-standard-8,replica-count=1,container-image-uri=${LEARNER_IMAGE_URI} \
  --args=--preprocess \
  --args=--input_type=bigquery \
  --args=--model_type=classification \
  --args=--stream_inputs \
  --args=--bq_project=${PROJECT_ID} \
  --args=--dataset_name=${DATASET_NAME} \
  --args=--table_name=${TABLE_NAME} \
  --args=--target_column=Adopted \
  --args=--num_parallel_reads=2 \
  --args=--optimizer_type=adam \
  --args=--data_cache=disk \
  --args=--deterministic_data=False \
  --args=--loss_function_type=weighted_cross_entropy \
  --args=--replace_transformed_features=True \
  --args=--apply_quantile_transform=True \
  --args=--apply_log_transform=True \
  --args=--max_steps=2000 \
  --args=--batch_size=4096 \
  --args=--learning_rate=0.01 \
  --args=--job-dir=${OUTPUT_DIR}

Conoce tu directorio de trabajos

Después de completar con éxito un trabajo de entrenamiento, el entrenamiento de TabNet crea un modelo entrenado en tu bucket de Cloud Storage, junto con otros artefactos. Encontrarás la siguiente estructura de directorio dentro de tu JOB_DIR:

  • artifacts/
    • metadata.json
  • model/ (un directorio SavedModel de TensorFlow que también contiene un archivo deployment_config.yaml)
    • saved_model.pb
    • deployment_config.yaml
  • processed_data/
    • test.csv
    • training.csv
    • validation.csv

El directorio de trabajos también contiene varios archivos de puntos de control del modelo en un directorio de “experimento”. Puedes usar TensorBoard para visualizar las métricas. Las métricas finales también se incluyen en deployment_config.yaml.

Confirma que la estructura de tu directorio en JOB_DIR coincida con la siguiente:

gsutil ls -a $JOB_DIR/*

Notebook instructivo

Hay un notebook de ejemplo en Colab para iniciar TabNet. En este notebook, también se muestra cómo usar lo siguiente:

  • Entrenamiento con una entrada de BigQuery

  • Entrenamiento distribuido con GPU

  • Ajuste de hiperparámetros

Marcas

Usa las siguientes marcas de entrenamiento genéricas y específicas de TabNet cuando entrenes un modelo.

Marcas de entrenamiento genéricas

Las siguientes marcas de entrenamiento personalizadas se usan con más frecuencia. Para obtener más información, consulta Crea trabajos de entrenamiento personalizados.

  • worker-pool-spec: Es la configuración del grupo de trabajadores que usa el trabajo personalizado. Para crear un trabajo personalizado con varios grupos de trabajadores, especifica varias opciones de configuración worker-pool-spec.

    Un worker-pool-spec puede contener los siguientes campos, que se enumeran con los campos correspondientes en el mensaje de la API de WorkerPoolSpec.

    • machine-type: Es el tipo de máquina para el grupo. Para obtener una lista de las máquinas compatibles, consulta Tipos de máquinas.
    • replica-count: Es la cantidad de réplicas de la máquina en el grupo.
    • container-image-uri: Es la imagen de Docker que se ejecutará en cada trabajador. Para usar el algoritmo integrado de TabNet, la imagen de Docker debe establecerse en us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/tab_net_v2:latest.
  • display-name: Es el nombre del trabajo.

  • region: Es la región en la que deseas que se ejecute el trabajo.

Marcas de entrenamiento específicas de TabNet

En la siguiente tabla, se muestran los parámetros de entorno de ejecución que puedes configurar en el trabajo de entrenamiento de TabNet:

Parámetro Tipo de datos Descripción Obligatorio
preprocess argumento booleano Especifica esto para habilitar el procesamiento previo automático. No
job_dir string El directorio de Cloud Storage en el que se almacenarán los archivos de salida del modelo.
input_metadata_path string La ruta de acceso de Cloud Storage a los metadatos específicos de TabNet para el conjunto de datos de entrenamiento. Consulta más arriba para saber cómo crear los metadatos. No
training_data_path string El patrón de Cloud Storage en el que se almacenan los datos de entrenamiento.
validation_data_path string El patrón de Cloud Storage en el que se almacenan los datos de evaluación. No
test_data_path string El patrón de Cloud Storage en el que se almacenan los datos de prueba.
input_type string "bigquery" o "csv": el tipo de los datos tabulares de entrada. Si se menciona cvs, la primera columna se trata como el objetivo. Si los archivos CSV tienen un encabezado, también pasa la marca “data_has_header”. Si se usa "bigquery", puedes proporcionar rutas de datos de entrenamiento o validación, o bien proporcionar nombres de tablas, proyectos y conjuntos de datos de BigQuery para el procesamiento previo a fin de producir los conjuntos de datos de entrenamiento y validación. No.: el valor predeterminado es "csv".
model_type string La tarea de aprendizaje, como clasificación o regresión.
split_column string El nombre de columna que se usa para crear las divisiones de entrenamiento, validación y prueba. Los valores de las columnas (también conocidas como table['split_column']) deben ser "TRAIN", "VALIDATE" o "TEST". “TEST” es opcional. Solo se aplica a la entrada de BigQuery. No
train_batch_size int Tamaño del lote para el entrenamiento. No.: el valor predeterminado es 1024.
eval_split float Fracción de división que se usará en el conjunto de datos de evaluación, si no se proporciona validation_data_path. No.: el valor predeterminado es 0.2
learning_rate float Tasa de aprendizaje para el entrenamiento. No: el valor predeterminado es la tasa de aprendizaje predeterminada del optimizador especificado.
eval_frequency_secs int Frecuencia con la que se realizarán las evaluaciones y los puntos de control. El valor predeterminado es 600. No
num_parallel_reads int Cantidad de subprocesos usados para leer archivos de entrada. Sugerimos establecerla en un valor igual o un poco menor que la cantidad de CPU de la máquina para obtener el máximo rendimiento en la mayoría de los casos. Por ejemplo, 6 por GPU es una buena opción predeterminada.
data_cache string Elige si deseas almacenar en caché los datos en "memory", "disk" o "no_cache". Para conjuntos de datos grandes, el almacenamiento en caché de los datos en la memoria generaría errores de memoria insuficiente, por lo que sugerimos elegir "disk". Puedes especificar el tamaño del disco en el archivo de configuración (como se ejemplifica a continuación). Asegúrate de solicitar un disco lo suficientemente grande (p. ej., tamaño de TB) a fin de escribir los datos para los conjuntos de datos grandes (escalamiento B). No: el valor predeterminado es "memory" .
bq_project string El nombre del proyecto de BigQuery. Si input_type=bigquery y se usa la marca –preprocessing, esta información es obligatoria. Esta es una alternativa a la especificación de rutas de datos de entrenamiento, validación y prueba. No
dataset_name string El nombre del conjunto de datos de BigQuery. Si input_type=bigquery y se usa la marca –preprocessing, esta información es obligatoria. Esta es una alternativa a la especificación de rutas de datos de entrenamiento, validación y prueba. No
table_name string El nombre de la tabla de BigQuery. Si input_type=bigquery y se usa la marca –preprocessing, esta información es obligatoria. Esta es una alternativa a la especificación de rutas de datos de entrenamiento, validación y prueba. No
loss_function_type string Existen varios tipos de funciones de pérdida en TabNet. Para la regresión: se incluyen mse/mae. Para la clasificación: se incluyen cross_entropy/weighted_cross_entropy/focal_loss. No: el valor predeterminado es “mse” para la regresión y “cross_entropy” para la clasificación.
deterministic_data argumento booleano Determinismo de la lectura de datos a partir de datos tabulares El valor predeterminado es False. Cuando se establece como True, el experimento es determinista. Para un entrenamiento rápido en conjuntos de datos grandes, sugerimos la configuración deterministic_data=False, aunque es aleatorio en los resultados (lo que se vuelve insignificante en los conjuntos de datos grandes). Ten en cuenta que el determinismo aún no está garantizado con el entrenamiento distribuido, ya que la reducción de mapas genera aleatorización debido al orden de las operaciones algebraicas con precisión finita. Sin embargo, esto es insignificante en la práctica, en especial en conjuntos de datos grandes. Para los casos en los que se desea un determinismo del 100%, además de la configuración deterministic_data=True, sugerimos el entrenamiento con una sola GPU (p. ej., con MACHINE_TYPE="n1-highmem-8"). No.: el valor predeterminado es False.
stream_inputs argumento booleano Transmite datos de entrada desde Cloud Storage en lugar de descargarlos de forma local: esta opción se sugiere para lograr un tiempo de ejecución rápido. No
large_category_dim int Dimensionalidad de la incorporación: si el número de categorías distintas de una columna categórica es mayor que large_category_thresh, utilizamos una incorporación dimensional large_category_dim en lugar de 1-D. El valor predeterminado es 1. Sugerimos aumentarlo (p. ej., a ~5 en la mayoría de los casos y hasta ~10 si la cantidad de categorías suele ser muy grande en el conjunto de datos) si el objetivo principal es lograr la exactitud, en lugar de la eficiencia y la explicabilidad computacionales. No: el valor predeterminado es 1.
large_category_thresh int Umbral para la cardinalidad de columnas categóricas: si la cantidad de categorías distintas para una columna categórica es mayor que large_category_thresh, se usa una incorporación dimensional large_category_dim en lugar de 1-D. El valor predeterminado es 300. Sugerimos disminuirlo (p. ej., a ~10) si el objetivo principal es lograr la exactitud, en lugar de la eficiencia y la explicabilidad computacionales. No: el valor predeterminado es 300.
yeo_johnson_transform argumento booleano Habilita Yeo-Johnson Power Transform entrenable (la opción predeterminada está inhabilitada). Consulta este vínculo: https://www.stat.umn.edu/arc/yjpower.pdf para obtener más información sobre Yeo-Johnson Power Transform. Con nuestra implementación, los parámetros de transformación se pueden aprender junto con TabNet, entrenados de extremo a extremo. No
apply_log_transform argumento booleano Si las estadísticas de transformación de registro sestán contenidas en los metadatos y esta marca es verdadera, los atributos de entrada se transformarán. Usa falso si no deseas usar la transformación y verdadero (el valor predeterminado) para usarla. Especialmente en el caso de los conjuntos de datos con distribuciones numéricas sesgadas, las transformaciones de registros podrían ser muy útiles. No
apply_quantile_transform argumento booleano Si las estadísticas de los cuantiles están contenidas en los metadatos y esta marca es verdadera, los atributos de entrada se transformarán. Usa falso si no deseas usar la transformación y verdadero (el valor predeterminado) para usarla. Especialmente en el caso de los conjuntos de datos con distribuciones numéricas sesgadas, las transformaciones cuantiles podrían ser muy útiles. Se admite actualmente para input_type de BigQuery. No

¿Qué sigue?