- APP神圣官网 > 官方版本 > 正文
模型TFCGCPTensorFlow(模型您的代码项目密钥)「模型源代码」
导读:前有Alpha Go神之一手2:0战胜柯洁,今有Deep Mind 解决了困扰生物界50年之久的蛋白质折叠问题有人认为这不过是另一场关于“狼来了”的故事,也有人认为这会给生物界带来新的变革至于狼是不是真的来了,交给时间来证明但是,这些都已经足以证明我们今天的主角——TensorFlow在人工智能领域的江湖地位,这次我们会从实例出发,来体验一下TensorFlow究竟妙在哪里~作者:Jonah Kohn and Pavithra Vijay, Software Engineers at GoogleTensorFlow Cloud是一个Python软件包,它提供的API,从在本地环境中调试训练TensorFlow代码到在Google Cloud中进行分布式培训,可实现无缝过渡它将云上训练模型的过程简化为一个简单的函数调用,所需的设置最少,对模型的更改几乎为零TensorFlow Cloud可自动处理特定于云的任务,例如为模型创建VM实例和分发策略本文演示了TensorFlow Cloud的常见用例以及一些最佳实践我们将逐步分类由stanford_dogs提供的犬种图像数据集为了简化这一过程,我们将使用通过ImageNet权重训练的ResNet50进行转移学习建立使用安装TensorFlow Cloud pip install tensorflow_cloud并通过添加所需的导入来启动用于分类任务的python脚本gcloud iam service-accounts keys create ~/key.json --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
配置Google CloudTensorFlow Cloud使用幕后的AI平台在Google Cloud上运行您的培训工作如果您不熟悉GCP,请按照本节中的设置步骤创建和配置您的第一个Google Cloud Project如果您不熟悉使用云,那么首次设置和配置将需要一些学习和工作好消息是设置完成后,您无需对TensorFlow代码进行任何更改即可在云上运行它了
创建一个GCP项目启用AI平台服务创建服务帐户下载授权密钥创建一个Google Cloud Storage BucketGCP项目Google Cloud项目包括一组云资源,例如一组用户、一组API、计费、身份验证和监视要创建项目,请遵循本指南在终端上运行本节中的命令export SA_NAME=<your-sa-name&rt;gcloud iam service-accounts create $SA_NAMEgcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --role 'roles/editor'
人工智能平台请确保通过在此下拉菜单中输入项目,项目ID为GCP项目启用AI平台服务https://github.com/tensorflow/cloud服务帐号和密钥为新GCP项目创建一个服务帐户服务帐户是应用程序或虚拟机实例使用的帐户,云应用程序使用该帐户进行授权的API调用gcloud iam service-accounts keys create ~/key.json --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
接下来,需要服务帐户的身份验证密钥此身份验证密钥是确保只有经过项目使用授权的人员才能使用您的GCP资源创建身份验证密钥:export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
创建GOOGLE_APPLICATION_CREDENTIALS环境变量export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
云存储桶如果您已经有一个指定的存储桶,请输入您的桶名称,如下所示否则,请按照指南创建Google Cloud存储桶TensorFlow Cloud使用Google Cloud Build构建和发布docker映像,以及存储辅助数据,例如模型检查点和培训日志GCP_BUCKET = "your-bucket-name"
Keras模型创建TensorFlow Cloud的模型创建工作流程与在本地构建和训练TF Keras模型相同资源准备从加载stanford_dogs数据集开始,对犬种进行分类这是tensorflow-datasets包的一部分如果数据集很大,建议将其托管在GCS上以提高性能stanford_dogs:https://blog.tensorflow.org/2020/08/train-your-tensorflow-model-on-google.htmltensorflow-datasets:https://www.tensorflow.org/datasets/catalog/overview
可视化数据集:print("Number of training samples: %d" % tf.data.experimental.cardinality(ds_train))print("Number of test samples: %d" % tf.data.experimental.cardinality(ds_test))print("Number of classes: %d" % NUM_CLASSES)
培训样本数量:12000 测试样本数量:8580 课程数量:120plt.figure(figsize=(10, 10))for i, (image, label) in enumerate(ds_train.take(9)): ax = plt.subplot(3, 3, i + 1) plt.imshow(image) plt.title(int(label)) plt.axis("off")
预处理调整大小并批量处理数据:IMG_SIZE = 224BATCH_SIZE = 64BUFFER_SIZE = 2 size = (IMG_SIZE, IMG_SIZE)ds_train = ds_train.map(lambda image, label: (tf.image.resize(image, size), label))ds_test = ds_test.map(lambda image, label: (tf.image.resize(image, size), label)) def input_preprocess(image, label): image = tf.keras.applications.resnet50.preprocess_input(image) return image, label
配置输入管道以提高性能请注意,要使用并行调用和预取,以便在训练模型时I / O不会阻塞您可以该指南中了解有关配置输入管道以提高性能的更多信息指南:https://www.tensorflow.org/guide/data_performanceds_train = ds_train.map( input_preprocess, num_parallel_calls=tf.data.experimental.AUTOTUNE) ds_train = ds_train.batch(batch_size=BATCH_SIZE, drop_remainder=True)ds_train = ds_train.prefetch(tf.data.experimental.AUTOTUNE) ds_test = ds_test.map(input_preprocess)ds_test = ds_test.batch(batch_size=BATCH_SIZE, drop_remainder=True)
建立模型使用ImageNet上训练的权重加载ResNet50,同时使用include_top =False,以重塑任务模型ImageNet:https://www.tensorflow.org/guide/data_performanceResNet50:https://www.tensorflow.org/guide/data_performanceinputs = tf.keras.layers.Input(shape=(IMG_SIZE, IMG_SIZE, 3))base_model = tf.keras.applications.ResNet50( weights="imagenet", include_top=False, input_tensor=inputs)x = tf.keras.layers.GlobalAveragePooling2D()(base_model.output)x = tf.keras.layers.Dropout(0.5)(x)outputs = tf.keras.layers.Dense(NUM_CLASSES)(x) model = tf.keras.Model(inputs, outputs)
冻结基础模型中所有层的当前权重,允许添加的附加层得到训练base_model.trainable = False
只要存储目标位于Cloud Storage Bucket内,即可在TensorFlow Cloud上轻松使用Keras回调在此示例中,我们将使用ModelCheckpoint回调在训练的各个阶段保存模型,使用Tensorboard回调可视化模型及其进度,并使用Early Stopping回调自动确定训练的最佳时期数ModelCheckpoint:https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ModelCheckpointTensorboard:https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoardEarly Stopping:https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStoppingMODEL_PATH = "resnet-dogs"checkpoint_path = os.path.join("gs://", GCP_BUCKET, MODEL_PATH, "save_at_{epoch}")tensorboard_path = os.path.join( "gs://", GCP_BUCKET, "logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))callbacks = [ tf.keras.callbacks.ModelCheckpoint(checkpoint_path), tf.keras.callbacks.TensorBoard(log_dir=tensorboard_path, histogram_freq=1), tf.keras.callbacks.EarlyStopping(monitor="val_loss", patience=3),]
编译模型optimizer = tf.keras.optimizers.Adam(learning_rate=1e-2)model.compile( optimizer=optimizer, loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"],)
在本地调试模型首先在本地环境中训练模型,以确保在将作业发送到GCP之前,代码就能够正确运行输入tfc.remote()用来确定代码应在本地执行还是在云上执行为了整个培训工作,选择比预期更少的时间段将有助于验证模型是否正常运行而不会使本地计算机过载if tfc.remote(): epochs = 500 train_data = ds_train test_data = ds_testelse: epochs = 1 train_data = ds_train.take(5) test_data = ds_test.take(5) callbacks = None model.fit( train_data, epochs=epochs, callbacks=callbacks, validation_data=test_data, verbose=2)if tfc.remote(): SAVE_PATH = os.path.join("gs://", GCP_BUCKET, MODEL_PATH) model.save(SAVE_PATH)
Google Cloud上的模型训练要在GCP上进行训练,请使用您的GCP项目设置填充示例代码,然后tfc.run()从您的代码中进行调用该API非常简单,所有参数均具有智能默认值同样,在使用TensorFlow Cloud时,不需要担心特定于云的任务,例如创建VM实例和分发策略API将:准备好您的python脚本/笔记本云和发行版将其转换为具有必需依赖项的docker映像在GCP群集上运行培训作业流相关日志并存储检查点该run()API提供了极大的使用灵活性,例如使用户能够指定自定义群集配置,自定义docker映像有关可用于调用的参数的完整列表run(),请参见TensorFlow Cloud自述文件创建一个包含模型所依赖的python软件包列表的文件requirements.txt默认情况下,TensorFlow Cloud包含TensorFlow及其依赖项作为默认Docker映像的一部分,因此无需将其包括在内请在与python文件相同的目录中创建requirements.txt此示例的内容是:tensorflow-datasetsmatplotlib
默认情况下,runAPI会根据您提供的集群配置将模型代码包装在TensorFlow分发策略中在此示例中,我们使用单节点多GPU配置因此,您的模型代码将自动包装在TensorFlow`MirroredStrategy`实例中调用run()以便开始在云上进行培训提交作业后,将为您提供云作业的链接要监视培训日志,请点击链接并选择“查看日志”以查看培训进度信息tfc.run( requirements_txt="requirements.txt", distribution_strategy="auto", chief_config=tfc.MachineConfig( cpu_cores=8, memory=30, accelerator_type=tfc.AcceleratorType.NVIDIA_TESLA_T4, accelerator_count=2, ), docker_image_bucket_name=GCP_BUCKET,)
使用TensorBoard可视化模型从GCS存储桶中加载Tensorboard日志,以评估模型的性能和历史记录tensorboard dev upload --logdir "gs://your-bucket-name/logs" --name "ResNet Dogs"训练后,加载存储在GCS存储桶中的模型,并评估其性能tensorboard dev upload --logdir "gs://your-bucket-name/logs" --name "ResNet Dogs"
下一步本文介绍了TensorFlow Cloud,这是一个python软件包,可将使用多个GPU / TPU的云中模型训练过程简化为一个函数,而对其模型代码的更改为零下一步,您可以在TensorFlow Cloud存储库中找到此代码示例以及许多其他代码示例TensorFlow Cloud:https://github.com/tensorflow/cloud虚拟机实例:https://github.com/tensorflow/cloudTensorFlow Cloud存储库:https://github.com/tensorflow/cloud/tree/master/src/python/tensorflow_cloud/core/tests/examples全文的完整代码:https://github.com/tensorflow/cloud/blob/master/src/python/tensorflow_cloud/core/tests/examples/call_run_within_script_with_keras_fit.py
编译自:Train your TensorFlow model on Google Cloud using TensorFlow Cloud
联系我们
在线咨询:
0 评论