El entrenamiento mediante algoritmos integrados en AI Platform Training te permite enviar el conjunto de datos y entrenar un modelo sin escribir ningún código de entrenamiento. En esta página, se explica cómo funciona el algoritmo integrado de clasificación de imágenes y cómo usarlo.
Descripción general
El algoritmo integrado de clasificación de imágenes usa tus conjuntos de datos de entrenamiento y validación a fin de entrenar modelos de forma continua y, luego, muestra el modelo guardado más preciso que se generó durante el trabajo de entrenamiento. También puedes usar el ajuste de hiperparámetros para lograr la mejor exactitud del modelo. El modelo guardado que se exportó se puede usar directamente en la predicción, ya sea de forma local o mediante su implementación en AI Platform Prediction para el servicio de producción.
Limitaciones
Los algoritmos integrados de imagen admiten el entrenamiento con CPU, GPU o TPU únicas. El modelo guardado resultante es compatible con la deriva en CPU y GPU.
Las siguientes funciones no son compatibles con el algoritmo integrado de clasificación de imágenes:
- Entrenamiento distribuido. Para ejecutar un trabajo de entrenamiento distribuido de TensorFlow en AI Platform Training, debes crear una aplicación de entrenamiento.
- Entrenamiento con varias GPU. Los algoritmos integrados solo utilizan una GPU a la vez. Para aprovechar al máximo el entrenamiento con varias GPU en una máquina, debes crear una aplicación de entrenamiento. Encuentra más información acerca de los tipos de máquinas.
Tipos de máquina admitidos
Se admiten los siguientes niveles de escala y tipos de máquinas de AI Platform Training:
- Nivel de escala
BASIC
- Nivel de escala
BASIC_TPU
- Nivel de escala
CUSTOM
con cualquiera de los tipos de máquina de Compute Engine compatibles con AI Platform Training. - Nivel de escala
CUSTOM
con cualquiera de los siguientes tipos de máquinas heredadas:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 núcleos)
Autoriza a Cloud TPU para que tenga acceso al proyecto
Da formato a los datos de entrada para el entrenamiento
El algoritmo integrado de clasificación de imágenes requiere que los datos de entrada tengan el formato tf.Examples
y que se guarden en archivos TFRecord. La estructura de datos tf.Example
y el formato de archivo TFRecord están diseñados para la lectura eficiente de datos con TensorFlow.
El formato TFRecord es un formato simple para almacenar una secuencia de registros binarios.
En este caso, todos los registros contienen representaciones binarias de imágenes. Cada imagen, junto con sus etiquetas de clase, se representa como tf.Example
. Puedes guardar muchos tf.Example
en un solo archivo TFRecord. También puedes fragmentar un conjunto de datos grande entre varios archivos TFRecord.
Obtén más información sobre TFRecord y tf.Example
.
Convierte tus imágenes a TFRecords
TensorFlow proporciona una secuencia de comandos que puedes usar para convertir las imágenes de formato JPEG a TFRecord.
Puedes usar la secuencia de comandos si se cumplen estas condiciones:
- Almacenas las imágenes en Cloud Storage.
Tienes archivos CSV con las rutas de acceso a las imágenes en Cloud Storage y sus etiquetas correspondientes. Por ejemplo:
gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
Almacenas estos archivos CSV en Cloud Storage.
En el siguiente ejemplo, se muestra cómo ejecutar la secuencia de comandos:
Descarga la secuencia de comandos:
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
Establece las variables para el ID del proyecto y el nombre del bucket, si aún no lo hiciste:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
Crea una lista de todas las etiquetas posibles para el conjunto de datos en un archivo temporal:
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
Ejecuta la secuencia de comandos con los datos de flores del depósito
cloud-ml-data
público y la lista de etiquetas:python -m jpeg_to_tf_record.py \ --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \ --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \ --labels_file /tmp/labels.txt \ --project_id $PROJECT_ID \ --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
Verifica los permisos del bucket de Cloud Storage
A fin de almacenar tus datos, usa un bucket de Cloud Storage en el mismo proyecto de Google Cloud que usas para ejecutar trabajos de AI Platform Training. De lo contrario, otorga acceso a AI Platform Training al depósito de Cloud Storage en el que se almacenan tus datos.
Formato de entrada requerido
Para entrenar mediante el algoritmo integrado de clasificación de imágenes, los datos de imagen deben estructurarse como tf.Example
, que incluyen los siguientes campos:
image/encoded
es la string de imagen sin formato.image/class/label
es una sola etiqueta de número entero para la imagen correspondiente. No se admiten varias etiquetas por instancia.El conjunto de etiquetas de números enteros que se usa para el conjunto de datos debe ser una secuencia consecutiva que comience en
1
. Por ejemplo, si tu conjunto de datos tiene cinco clases, cada etiqueta debe ser un número entero en el intervalo[1, 5]
.
Por ejemplo:
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
Obtén el mejor modelo guardado como resultado
Cuando finaliza el trabajo de entrenamiento, AI Platform Training escribe un modelo guardado de TensorFlow en el depósito de Cloud Storage que especificaste como jobDir
cuando enviaste el trabajo. El modelo guardado se escribe en jobDir/model
. Por ejemplo, si envías el trabajo a gs://your-bucket-name/your-job-dir
, AI Platform Training escribe el modelo guardado en gs://your-bucket-name/your-job-dir/model
.
Si habilitaste el ajuste de hiperparámetros, AI Platform Training muestra el modelo guardado de TensorFlow con la mayor exactitud que se obtuvo durante el proceso de entrenamiento. Por ejemplo, si enviaste un trabajo de entrenamiento con 2,500 pasos de entrenamiento y la mayor exactitud se produjo a los 2,000 pasos, se obtiene un modelo guardado de TensorFlow de ese punto en particular.
Cada prueba de AI Platform Training escribe el modelo guardado de TensorFlow con la mayor exactitud en su propio directorio dentro del bucket de Cloud Storage. Por ejemplo, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
La firma del resultado del modelo guardado es la siguiente:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['image_bytes'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Placeholder:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['classes'] tensor_info:
dtype: DT_INT64
shape: (-1)
name: ArgMax:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['probabilities'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1000)
name: softmax_tensor:0
Method name is: tensorflow/serving/predict
Datos de entrada:
image_bytes
: Los bytes de imagen sin formato (no decodificados). Esto es lo mismo queimage/encoded
almacenado en tf.Example.key
: Es el identificador de valor de la string del resultado de la predicción. Este valor se envía a lakey
del resultado. En la predicción por lotes, esto ayuda a vincular el resultado de la predicción con la entrada.
Resultados:
classes
: La etiqueta de clase prevista (número entero), que es la que tiene la probabilidad más altakey
: La clave de resultadoprobabilities
: Laprobability
(entre 0 y 1) para cadaclass
(de 0 anum_classes
)
El siguiente es un ejemplo de entradas y resultados de predicción:
prediction_input: {
'image_bytes': 'some_raw_image_bytes',
'key': ['test_key'])
}
prediction_output: {
'probabilities': [[0.1, 0.3, 0.6]],
'classes': [2],
'key': ['test_key'],
}
Configuración de ejemplo
Si envías un trabajo mediante gcloud
, debes crear un archivo config.yaml
para las especificaciones de ajuste de hiperparámetros y tipo de máquina. Si usas la consola de Google Cloud, no es necesario que crees este archivo. Obtén información sobre cómo enviar un trabajo de entrenamiento.
En el siguiente archivo config.yaml
de ejemplo, se muestra cómo asignar recursos TPU para el trabajo de entrenamiento:
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Luego usa el archivo config.yaml
para enviar un trabajo de entrenamiento.
Configuración del ajuste de hiperparámetros
Para usar el ajuste de hiperparámetros, incluye la configuración en el mismo archivo config.yaml
que la configuración de la máquina.
Puedes encontrar explicaciones breves de cada hiperparámetro en de la consola de Google Cloud y una explicación más completa en la referencia para el algoritmo integrado de clasificación de imágenes.
En el siguiente archivo config.yaml
de ejemplo, se muestra cómo asignar recursos TPU para el trabajo de entrenamiento y, además, se incluye la configuración del ajuste de hiperparámetros:
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: top_1_accuracy
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.2
scaleType: UNIT_LOG_SCALE
EOF
Envía un trabajo de entrenamiento de clasificación de imágenes
En esta sección, se explica cómo enviar un trabajo de entrenamiento mediante el algoritmo integrado de clasificación de imágenes.
Console
Selecciona tu algoritmo
Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:
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.
En la página Crea un trabajo de entrenamiento nuevo, selecciona Clasificación de imágenes y, luego, haz clic en Siguiente.
Selecciona los datos de entrenamiento y validación
En el cuadro desplegable debajo de Datos de entrenamiento, especifica si usas un solo archivo o varios:
- Si usas un solo archivo, selecciona “Usar un solo archivo en un depósito de GCS”.
- Si usas varios archivos, selecciona “Usar varios archivos almacenados en un directorio de Cloud Storage”.
En Ruta del directorio, 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.
Si seleccionas varios archivos, coloca los caracteres comodín en Nombre del comodín. La “Ruta de acceso completa de GCS” se muestra debajo para que puedas confirmar si es correcta.
En el cuadro desplegable debajo de Datos de validación, especifica si usas un solo archivo o varios:
- Si usas un solo archivo, selecciona “Usar un solo archivo en un depósito de GCS”.
- Si usas varios archivos, selecciona “Usar varios archivos almacenados en un directorio de Cloud Storage”.
En Ruta del directorio, 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.
Si seleccionas varios archivos, coloca los caracteres comodín en Nombre del comodín. La “Ruta de acceso completa de GCS” se muestra debajo para que puedas confirmar si es correcta.
En Directorio de resultados, ingresa la ruta de acceso al depósito de Cloud Storage en el que deseas que AI Platform Training almacene los resultados del trabajo de entrenamiento. Puedes completar la ruta de acceso al depósito de Cloud Storage directamente o hacer clic en el botón Explorar para seleccionarla.
A fin de mantener el orden, crea un directorio nuevo dentro del bucket de Cloud Storage para este trabajo de entrenamiento. Puedes hacerlo desde el panel Explorar.
Haz clic en Siguiente.
Configura los argumentos del algoritmo
Cada argumento específico del algoritmo muestra un valor predeterminado para los trabajos de entrenamiento sin ajuste de hiperparámetros. Si habilitas el ajuste de hiperparámetros en un argumento de algoritmo, debes especificar su valor mínimo y máximo.
Si deseas obtener más información sobre todos los argumentos de algoritmo, sigue los vínculos en la consola de Google Cloud y consulta la referencia del algoritmo integrado de clasificación de imágenes para conocer más detalles.
Envía el trabajo
En la pestaña Configuración del trabajo, haz lo siguiente:
- Ingresa un ID de trabajo único.
- Ingresa una región disponible (como “us-central1”).
- A fin de elegir los tipos de máquinas, selecciona “CUSTOM” para el nivel de escala.
Aparecerá una sección para que proporciones la especificación personalizada del clúster.
- Selecciona un tipo de máquina disponible para el tipo principal.
- Si deseas usar TPU, configura el Tipo de trabajador como cloud_tpu. El recuento de trabajadores se establece de forma predeterminada en 1.
Haz clic en Listo para enviar el trabajo de entrenamiento.
gcloud
Configura las variables de entorno para tu trabajo:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="flowers" ALGORITHM="image_classification" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
Envía el trabajo:
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
Una vez que enviaste el trabajo de forma correcta, puedes ver los registros si ejecutas los siguientes comandos de
gcloud
:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
¿Qué sigue?
- Consulta la referencia del algoritmo de clasificación de imágenes para obtener información sobre los diferentes parámetros.