Comienza a usar el algoritmo integrado TabNet

Con los algoritmos integrados en AI Platform Training, puedes enviar los datos de entrenamiento, seleccionar un algoritmo y permitir que AI Platform Training se encargue del procesamiento previo y el entrenamiento, sin tener que escribir ningún código para una aplicación de entrenamiento.

Descripción general

En este instructivo, entrenarás un modelo de TabNet sin escribir ningún código. Deberás enviar el conjunto de datos de ingresos del censo a AI Platform Training para su procesamiento previo y entrenamiento y, luego, implementar el modelo en AI Platform Training a fin de obtener predicciones. El modelo resultante predice la probabilidad de que el ingreso anual de una persona sea mayor que $50,000.

Antes de comenzar

Para completar este instructivo en la línea de comandos, usa Cloud Shell o cualquier entorno en el que esté instalado Google Cloud CLI.

Completa los siguientes pasos para configurar una cuenta de GCP, habilitar las API necesarias y, también, instalar y activar Google Cloud CLI.

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de AI Platform Training & Prediction and Compute Engine.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de AI Platform Training & Prediction and Compute Engine.

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Crear

Para usar algoritmos tabulares integrados, debes quitar la fila del encabezado de tu archivo CSV y mover los valores de destino a la primera columna. Modificamos el conjunto de datos del censo original a fin de usarlo en este instructivo y lo alojamos en un depósito público de Cloud Storage, gs://cloud-samples-data/ai-platform/census/algorithms/data/.

Consola

Antes de comenzar tu trabajo de entrenamiento, debes copiar los datos de nuestro bucket público de Cloud Storage en tu bucket.

Copia los datos de muestra en tu depósito de Cloud Storage

  1. Primero, descarga los datos de entrenamiento y de prueba desde nuestro bucket público de Cloud Storage.

    1. Navega a nuestro bucket público de Cloud Storage:

      Obtén los datos de muestra

    2. Descarga test.csv y train.csv:

      1. Haz clic en el nombre del archivo.

      2. En la página Detalles del objeto, haz clic en Descargar. Estos archivos se descargan en el entorno local como ai-platform_census_algorithms_data_test.csv y ai-platform_census_algorithms_data_train.csv, respectivamente.

  2. A continuación, sube los datos de entrenamiento y de prueba a tu bucket de Cloud Storage.

    1. Navega a la página del navegador de tu bucket de Cloud Storage. Selecciona tu proyecto desde la lista desplegable Selecciona un proyecto o ábrelo en una pestaña nueva:

      Página del navegador de Cloud Storage

    2. Haz clic en el nombre del bucket que deseas usar o crea uno nuevo si todavía no tienes uno. Si creas un bucket nuevo, asegúrate de que sea un bucket regional y selecciona la misma región en la que ejecutas el trabajo de entrenamiento de AI Platform Training.

    3. De manera opcional, haz clic en Crear carpeta a fin de crear una carpeta para los archivos que subas. Ingresa un nombre para la carpeta (por ejemplo, “datos”) y haz clic en Crear. A continuación, navega hasta la carpeta nueva; para ello, haz clic en el nombre de la carpeta.

    4. Haz clic en Subir archivos para subir los archivos de entrenamiento y de prueba, ai-platform_census_algorithms_data_train.csv y ai-platform_census_algorithms_data_test.csv, a tu bucket.

Ahora que los datos están copiados en tu bucket, puedes comenzar un trabajo de entrenamiento; para ello, selecciona el tipo de algoritmo que deseas usar.

Selecciona tu algoritmo

  1. Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:

    Página Trabajos de AI Platform Training

  2. Haz clic en el botón Trabajo de entrenamiento nuevo. En las opciones que se muestran a continuación, haz clic en Entrenamiento de algoritmos integrados. Aparecerá la página Crear un trabajo de entrenamiento nuevo.

  3. La creación de un trabajo de entrenamiento se divide en cuatro pasos. El primero es el Algoritmo de entrenamiento. Selecciona TabNet y haz clic en Siguiente.

gcloud

Configura las variables de entorno para el ID de tu proyecto, tu bucket de Cloud Storage, la ruta de acceso de Cloud Storage a los datos de entrenamiento y la selección del algoritmo.

Los algoritmos integrados de AI Platform Training se encuentran en contenedores de Docker que se alojan en Container Registry.

PROJECT_ID=YOUR_PROJECT_ID
BUCKET_NAME=YOUR_BUCKET_NAME
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Copy the training data into your Cloud Storage bucket, and set the path
# to your copy of the training data.
TRAINING_DATA_SOURCE=gs://cloud-samples-data/ai-platform/census/algorithms/data/train.csv
TRAINING_DATA_PATH=gs://$BUCKET_NAME/algorithms-demo/data/train.csv
gsutil cp $TRAINING_DATA_SOURCE $TRAINING_DATA_PATH

# Specify the Docker container URI specific to the algorithm.
IMAGE_URI="gcr.io/cloud-ml-algos/tab_net:latest"

Envía un trabajo de entrenamiento

Para enviar un trabajo, debes especificar algunos argumentos de entrenamiento básicos y algunos argumentos básicos relacionados con el algoritmo TabNet.

Argumentos generales para el trabajo de entrenamiento:

Argumentos del trabajo de entrenamiento
Argumento Descripción
job-id ID único para el trabajo de entrenamiento. Puedes usarlo para buscar registros del estado de tu trabajo de entrenamiento una vez que lo hayas enviado.
job-dir Ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento tras completar un trabajo de entrenamiento de forma correcta.
scale-tier Especifica los tipos de máquinas para el entrenamiento. Usa BASIC para seleccionar una configuración de una sola máquina.
master-image-uri El URI de Container Registry usado para especificar qué contenedor de Docker se usará en el trabajo de entrenamiento. Usa el contenedor para el algoritmo integrado TabNet definido anteriormente como IMAGE_URI.
region Especifica la región disponible en la que se ejecuta tu trabajo de entrenamiento. Para este instructivo, puedes usar la región us-central1.

Argumentos específicos del algoritmo integrado TabNet:

Argumentos del algoritmo
Argumento Descripción
preprocess Argumento booleano que indica si AI Platform Training debe o no procesar previamente los datos.
model_type Indica el tipo de modelo que se entrenará: clasificación o regresión.
training_data_path Ubicación de Cloud Storage de los datos de entrenamiento, que debe ser un archivo CSV.
learning_rate La tasa de aprendizaje usada por el optimizador lineal.
max_steps Cantidad de pasos para ejecutar el entrenamiento.
batch_size Cantidad de ejemplos para utilizar por paso de entrenamiento.
feature_dim Dimensionalidad de la representación oculta en el bloque de transformación de atributos.
feature_dim_ratio Proporción entre la dimensión de resultados (dimensionalidad de los resultados de cada paso de decisión) y la dimensión de atributos.
num_decision_steps Cantidad de pasos secuenciales de decisión.
relaxation_factor Factor de relajación que promueve la reutilización de cada atributo en diferentes pasos de decisión. Cuando es 1, se garantiza que una función se use solo en un paso de decisión y, a medida que aumenta, se proporciona más flexibilidad para usar una función en varios pasos de decisión.
num_transformer_layers Cantidad de capas de transformador para cada paso de decisión.
num_transformer_layers_ratio Proporción de la capa de transformador compartida y las capas de transformador.
eval_steps Cantidad de pasos (en lotes) necesarios para ejecutar la evaluación. Si no se especifica, significa ejecutar la evaluación en todo el conjunto de datos de validación.

Para obtener una lista detallada de todas las demás marcas del algoritmo TabNet, consulta la referencia de TabNet incorporada.

Consola

  1. Deja Habilitar el procesamiento previo automático de los datos marcado.

  2. Para Ruta de acceso a los datos de entrenamiento, haz clic en Explorar. En el panel derecho, haz clic en el nombre del bucket en el que subiste los datos de entrenamiento y navega hasta tu archivo ai-platform_census_algorithms_data_train.csv.

  3. Deja los campos Datos de validación y Datos de prueba con sus opciones de configuración predeterminadas.

  4. En Directorio de resultados, ingresa la ruta de acceso a tu depósito de Cloud Storage en el que quieres que AI Platform Training almacene los resultados del trabajo de entrenamiento. Puedes completar la ruta a tu depósito de Cloud Storage directamente o hacer clic en el botón Explorar para seleccionar el depósito.

    A fin de mantener el orden, crea un directorio nuevo dentro de tu bucket de Cloud Storage para este trabajo de entrenamiento. Puedes hacerlo desde el panel Explorar.

    Haz clic en Siguiente.

  5. Para Tipo de modelo, selecciona Clasificación.

  6. Deja todos los otros campos con su configuración predeterminada y, a continuación, haz clic en Siguiente.

  7. En la página Configuración del trabajo, haz lo siguiente:

    1. Ingresa un ID del trabajo único (como "tabnet_example").
    2. Ingresa una región disponible (como “us-central1”).
    3. Selecciona "BASIC" para el nivel de escala.

    Haz clic en Listo a fin de enviar el trabajo de entrenamiento.

gcloud

  1. Configura todos los argumentos para el trabajo de entrenamiento y el algoritmo antes de usar gcloud a fin de enviar el trabajo:

    DATASET_NAME="census"
    ALGORITHM="tabnet"
    MODEL_TYPE="classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. Envía el trabajo:

    gcloud ai-platform jobs submit training $JOB_ID \
      --master-image-uri=$IMAGE_URI --scale-tier=BASIC \
      --job-dir=$JOB_DIR \
      -- \
      --max_steps=2000 \
      --preprocess \
      --model_type=$MODEL_TYPE \
      --batch_size=4096 \
      --learning_rate=0.01 \
      --training_data_path=$TRAINING_DATA_PATH
    

  3. Una vez que enviaste el trabajo de forma correcta, puedes ver los registros con la ejecución de los siguientes comandos de gcloud:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Conoce tu directorio de trabajos

Después de completar con éxito un trabajo de entrenamiento, AI Platform Training crea un modelo entrenado en el 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 de modelo guardado de TensorFlow que también contiene un archivo deployment_config.yaml)
    • saved_model.pb
    • deployment_config.yaml
  • procesados_datos/
    • 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”.

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

gsutil ls -a $JOB_DIR/*

Implementa el modelo entrenado

AI Platform Training organiza los modelos entrenados mediante recursos de modelo y de versión. Un modelo AI Platform Training es un contenedor para las versiones del modelo de aprendizaje automático.

Para implementar un modelo, debes crear un recurso de modelo en AI Platform Training, crear una versión de ese modelo y, luego, usar el modelo y la versión para solicitar predicciones en línea.

Para obtener más información sobre cómo implementar modelos en AI Platform Training, consulta Cómo implementar un modelo de TensorFlow.

Consola

  1. En la página Trabajos puedes encontrar una lista de todos tus trabajos de entrenamiento. Haz clic en el nombre del trabajo de entrenamiento que acabas de enviar ("tab_net_example" o el nombre del trabajo que usaste).

  2. En la página Detalles del trabajo puedes ver el progreso general de tu trabajo, o haz clic en Ver registros para obtener una vista más detallada de su progreso.

  3. Cuando el trabajo se haya completado correctamente, aparecerá el botón Implementar modelo en la parte superior. Haz clic en Implementar modelo.

  4. Selecciona Implementar como nuevo modelo y, a continuación, ingresa un nombre de modelo, como "algorithms_tab_net_model". Luego, haz clic en Confirmar.

  5. En la página Crear versión, ingresa un nombre de versión, como "v1", y deja todos los otros campos con su configuración predeterminada. Haz clic en Guardar.

gcloud

El proceso de entrenamiento con el algoritmo integrado de clasificación de imágenes genera un archivo, deployment_config.yaml, que facilita la implementación del modelo en AI Platform Training para las predicciones.

  1. Copia el archivo a tu directorio local y visualiza su contenido:

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    El archivo deployment_config.yaml debería ser similar al que se muestra a continuación:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/census_tab_net_classification/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: census_tab_net_classification_20190227060114
    runtimeVersion: '1.14'
    
  2. Crea el modelo y la versión en AI Platform Training:

    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    La versión tarda unos minutos en crearse.

Obtén predicciones en línea

Cuando solicitas predicciones, debes asegurarte de que tus datos de entrada tengan el mismo formato que los de entrenamiento. Antes del entrenamiento, AI Platform Training realiza el procesamiento previo de los datos, ya que los transforma en el corpus que se muestra en metadata.json.

El modelo TabNet aplica un procesamiento previo similar a tus datos de entrada antes de hacer predicciones.

Consola

  1. En la página Detalles de la versión de “v1”, que es la versión que acabas de crear, puedes enviar una solicitud de predicción de muestra.

    Selecciona la pestaña Probar y usar.

  2. Copia la siguiente muestra en el campo de entrada:

     {
       "instances": [
         {"csv_row": "44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States", "key": "dummy-key"}
       ]
     }
    
  3. Haz clic en Probar.

    El resultado de la predicción de muestra tiene varios campos. La lista classes muestra la clase prevista 1':

    {
       "predictions": [
         {
           ...
           "predicted_classes": [
             "1"
           ],
           ...
         }
       ]
     }
    

    En este caso, el modelo implementado predice que la persona cuya información proporcionaste ganará un salario superior a $50,000. Debido a que el entrenamiento no es determinista, el modelo puede variar.

gcloud

  1. Revisa las últimas líneas de metadata.json:

    gsutil cat $JOB_DIR/artifacts/metadata.json | tail
    

    En el objeto target_column.mapping, puedes ver cómo se mostrarán las clases previstas en los resultados de la predicción:

        "target_algorithm": "TensorFlow",
        "target_column": {
          "mapping": {
            "0": "<=50K",
            "1": ">50K"
          },
        "num_category": 2,
        "type": "classification"
      }
    }
    
  2. Prepara la entrada de predicción para una instancia de datos: Ten en cuenta que debes proporcionar cada instancia de datos como un objeto JSON con los siguientes campos:

    • csv_row, una string que contiene una fila de atributos separados por coma en el mismo formato que las instancias que se usaron durante el entrenamiento.
    • key, un identificador de string que es único para cada instancia. Esto funciona como una clave de instancia, que aparece como parte del resultado de la predicción, por lo que puedes hacer coincidir cada predicción con la instancia de entrada correspondiente.

      Esto es necesario para la predicción por lotes, ya que esta procesa la entrada y guarda el resultado en un orden impredecible.

      Para la predicción en línea, que produce un resultado en el mismo orden que la entrada que proporcionaste, las claves de instancia son menos importantes. En este ejemplo, solo se realizan predicciones en una sola instancia, por lo que el valor de la clave de instancia no es relevante.

    Para enviar una solicitud de predicción en línea mediante la CLI de Google Cloud, como en este ejemplo, escribe cada instancia en una fila del archivo JSON delimitado por saltos de línea.

    Ejecuta los siguientes comandos en tu terminal a fin de crear entradas para una sola instancia que puedas enviar a AI Platform Prediction:

     # A sample record from census dataset. Ground truth is >50K
    RAW_DATA_POINT='44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States'
    
     # Create a prediction request file
    echo "{\"csv_row\": \"$RAW_DATA_POINT\", \"key\": \"dummy-key\"}" > sample_input.json
    
    # Check the prediction request file.
    cat sample_input.json
    
  3. Envía la solicitud de predicción:

    gcloud ai-platform predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --json-instances sample_input.json \
      --format "value(predictions[0].predicted_classes[0])"
    

    Este resultado de predicción se filtra para mostrar solo la clase prevista:

    1
    

Lo más probable es que el resultado de la predicción sea 1, que es >50K como la asignación en metadata.json. El modelo implementado predice que la persona cuya información proporcionaste ganará un salario superior a $50,000. Debido a que el entrenamiento no es determinista, el modelo puede variar.

Información sobre el resultado de la predicción y la explicación

Después de enviar la solicitud de predicción en línea, obtienes predicciones y explicaciones. El resultado incluye predicted_classes para los problemas de clasificación o predicted_values para los problemas de regresión.

Predicción

Este es el resultado de muestra de una sola solicitud de predicción para datos del censo:

{"predicted_classes": [1], "logits": [0.4880162477493286], "aggregated_mask_values": [0.7823681235313416, 0.0, 0.0, 0.5490312576293945, 0.0, 1.0856571197509766, 0.22187761962413788, 0.0, 0.0, 0.0, 0.23591244220733643, 0.0, 0.0, 0.0], "key": ["4"]}

Para un problema de clasificación, predicted_classes tendrá un valor de 0 a N-1 (N es el número de clases).

La asignación entre el predicted_classes y el nombre de clase real se puede encontrar en las entradas target_column en el archivo metadata.json. Por ejemplo, la clase <=50K en el conjunto de datos del censo se asigna al valor 0 de la siguiente manera:

"target_column": {
"mapping": {
  "0": "<=50K",
  "1": ">50K"
},
"num_category": 2,
"type": "classification"

Explicación

La predicción también incluye el aggregated_mask_values, que se usa para explicar el modelo. Los valores de la máscara son un vector, que tiene una dimensión igual a la cantidad de atributos en el problema. Cuanto más alto sea el valor de la máscara, más importante será el atributo correspondiente.

En el resultado del ejemplo anterior, los 14 valores en aggregated_mask_values están asociados con los 14 atributos de entrada del conjunto de datos del censo. En este caso, el sexto atributo es el más importante.

También puedes buscar un notebook de muestra para visualizar la importancia de los atributos en función del aggregated_mask_values.

Acerca de los datos

UC Irvine Machine Learning Repository aloja el conjunto de datos de ingresos del censo que se usa en esta muestra para el entrenamiento.

Los datos del censo son cortesía de Lichman, M. (2013). UCI Machine Learning Repositoryhttp://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science.

¿Qué sigue?