使用 AI Platform Training 中的内置算法进行训练时,您无需编写任何训练代码即可提交数据集并训练模型。本页面介绍内置图片分类算法的工作原理以及使用方法。
概览
内置的图片分类算法使用训练和验证数据集连续训练模型,然后输出在训练作业过程中生成的最准确的 SavedModel。您还可以使用超参数调节来获得最佳模型准确度。导出的 SavedModel 可直接用于本地预测,也可部署到 AI Platform Prediction 以用于生产环境服务。
限制
图片内置算法支持使用单个 CPU、GPU 或 TPU 进行训练。生成的 SavedModel 适用于在 CPU 和 GPU 上应用。
使用内置图片分类算法进行训练时,不支持以下功能:
- 分布式训练。如需在 AI Platform Training 上运行 TensorFlow 分布式训练作业,您必须创建一个训练应用。
- 多 GPU 训练。内置算法一次只使用一个 GPU。要在一台机器上充分利用多个 GPU 进行训练,您必须创建一个训练应用。查找关于机器类型的详细信息。
支持的机器类型
以下是系统支持的 AI Platform Training 容量层级和机器类型:
BASIC
容量层级BASIC_TPU
容量层级CUSTOM
容量层级和 AI Platform Training 所支持的任何 Compute Engine 机器类型。CUSTOM
容量层级和以下任何旧版机器类型: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 个核心)
授权 Cloud TPU 访问项目
设置输入数据的格式以用于训练
内置的图片分类算法要求输入数据的格式为 tf.Examples
,并保存在 TFRecord 文件中。tf.Example
数据结构和 TFRecord 文件格式均旨在通过 TensorFlow 高效读取数据。
TFRecord 格式是一种用于存储一系列二进制记录的简单格式。
在本例中,所有记录都包含图片的二进制表示形式。每个图片及其类别标签都表示为 tf.Example
。您可以将多个 tf.Example
保存到单个 TFRecord 文件中。您还可以将一个大型数据集分片到多个 TFRecord 文件中。
详细了解 TFRecord 和 tf.Example
。
将图片转换为 TFRecord 格式
TensorFlow 提供了脚本,可用于将图片从 JPEG 格式转换为 TFRecord 格式。
您可以在以下情况下使用脚本:
- 您将图片存储在 Cloud Storage 中。
您有 CSV 文件,其中包含 Cloud Storage 中图片的路径及其对应的标签。例如:
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
您将这些 CSV 文件存储在 Cloud Storage 中。
以下示例展示了如何运行该脚本:
下载脚本:
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
如果您尚未设置项目 ID 和存储分区名称的变量,请执行此操作:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
在临时文件中为数据集创建所有可能的标签的列表:
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
使用来自公开
cloud-ml-data
存储分区的花卉数据和您的标签列表来运行脚本: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
检查 Cloud Storage 存储分区权限
要存储数据,请使用用于运行 AI Platform Training 作业的同一 Google Cloud 项目中的 Cloud Storage 存储分区。否则,需要向 AI Platform Training 授予对存储数据的 Cloud Storage 存储分区的访问权限。
要求的输入格式
如需使用内置的图片分类算法进行训练,您的图片数据的结构必须为 tf.Example
,其中包含以下字段:
image/encoded
是原始图片字符串。image/class/label
是相应图片的单个整数标签。不支持每个实例多个标签。用于数据集的整数标签集必须是从
1
开始的连续序列。例如,如果您的数据集有五个类,则每个标签必须是区间[1, 5]
中的一个整数。
例如:
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
获取最佳 SavedModel 作为输出
训练作业完成后,AI Platform Training 会将 TensorFlow SavedModel 写入您在提交作业时指定为 jobDir
的 Cloud Storage 存储分区。SavedModel 写入 jobDir/model
。例如,如果您将作业提交到 gs://your-bucket-name/your-job-dir
,则 AI Platform Training 会将 SavedModel 写入 gs://your-bucket-name/your-job-dir/model
。
如果您启用了超参数调节,AI Platform Training 会返回在训练过程中获得的具有最高准确度的 TensorFlow SavedModel。例如,如果您提交的训练作业包含 2500 个训练步骤,且准确度在 2000 个步骤时最高,您会获得从该特定点保存的 TensorFlow SavedModel。
每次 AI Platform Training 试验都会将具有最高准确度的 TensorFlow SavedModel 写入其在您的 Cloud Storage 存储分区内的专属目录中。例如 gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
。
输出 SavedModel 签名是:
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
输入:
image_bytes
:原始(未解码)图片字节。这与 tf.Example 中存储的image/encoded
相同。key
:预测输入的字符串值标识符。此值会传递给输出key
。在批量预测中,这有助于将预测输出映射到输入。
输出:
classes
:预测的类(整数)标签,即概率最高的标签。key
:输出键。probabilities
:每个class
(范围从 0 到num_classes
)的probability
(介于 0 和 1 之间)。
以下是预测输入和输出的示例:
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'],
}
配置示例
如果您使用 gcloud
提交作业,则需要针对机器类型和超参数调节规范创建 config.yaml
文件。如果您使用
则您无需创建此文件。了解如何提交训练作业。
以下示例 config.yaml
文件展示了如何为训练作业分配 TPU 资源:
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
接下来,使用 config.yaml
文件来提交训练作业。
超参数调节配置
如需使用超参数调节,请将超参数调节配置添加到与机器配置相同的 config.yaml
文件中。
您可以在 Google Cloud 控制台中查找每个超参数的简要说明,并在内置图片分类算法参考文档中查看更详细的说明。
以下示例 config.yaml
文件展示了如何为训练作业分配 TPU 资源,并包含超参数调节配置:
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
提交图片分类训练作业
本部分介绍如何使用内置的图片分类算法提交训练作业。
控制台
选择算法
转到 Google Cloud 控制台中的 AI Platform Training“作业”页面:
点击新建训练作业按钮。从下方显示的选项中,点击内置算法训练。
在创建新训练作业页面上,选择图片分类,然后点击下一步。
选择训练和验证数据
在训练数据下的下拉框中,指定您要使用单个文件还是多个文件:
- 对于单个文件,请选择“使用 GCS 存储分区中的单个文件”(Use single file in a GCS bucket" selected)。
- 对于多个文件,请选择“使用存储在一个 Cloud Storage 目录中的多个文件”。
对于目录路径,请点击浏览。在右侧面板中,点击您将训练数据上传到的存储分区的名称,然后导航到您的文件。
如果您要选择多个文件,请将通配符放入通配符名称。下面显示了“完整的 GCS 路径”,可帮助您确认路径是否正确。
在验证数据下的下拉框中,指定您要使用单个文件还是多个文件:
- 对于单个文件,请选择“使用 GCS 存储分区中的单个文件”(Use single file in a GCS bucket" selected)。
- 对于多个文件,请选择“使用存储在一个 Cloud Storage 目录中的多个文件”。
对于目录路径,请点击浏览。在右侧面板中,点击您将训练数据上传到的存储分区的名称,然后导航到您的文件。
如果您要选择多个文件,请将通配符放入通配符名称。下面显示了“完整的 GCS 路径”,可帮助您确认路径是否正确。
在输出目录中,输入您希望 AI Platform Training 用于存储训练作业输出的 Cloud Storage 存储分区的路径。您可以直接填写 Cloud Storage 存储分区路径,或点击浏览按钮来选择。
为了便于管理,请在 Cloud Storage 存储分区中为此训练作业创建一个新目录。您可以在浏览窗格中执行此操作。
点击下一步。
设置算法参数
在未进行超参数调节的情况下,每个算法特定的参数都会显示训练作业的默认值。如果您对某个算法参数启用了超参数调节,则必须指定其最小值和最大值。
如需详细了解所有算法参数,请点击 Google Cloud 控制台中的链接,并参阅内置图片分类参考文档,以了解详情。
提交作业
在作业设置标签页上,执行以下操作:
- 输入唯一作业 ID。
- 输入可用区域(例如“us-central1”)。
- 如需选择机器类型,请在容量层级部分选择“CUSTOM”。
此时,系统会显示一个提供自定义集群规范的部分。
- 对于主机器类型,请选择可用的机器类型。
- 如果希望使用 TPU,请将工作器类型设置为 cloud_tpu。 “工作器计数”默认为 1。
点击完成,提交训练作业。
gcloud
为作业设置环境变量:
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}"
提交作业:
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'
成功提交作业后,您可以使用以下
gcloud
命令查看日志:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
后续步骤
- 请参阅内置图片分类参考,了解所有不同的参数。