Vertex AI Workbench:運用遷移學習和筆記本執行程式建構圖像分類模型

1. 總覽

在本研究室中,您將瞭解如何透過 Vertex AI Workbench 設定及啟動筆記本執行作業。

課程內容

學習重點:

  • 在筆記本中使用參數
  • 透過 Vertex AI Workbench 使用者介面設定及啟動筆記本執行作業

在 Google Cloud 中執行這個研究室的總費用約為 $2 美元。

2. Vertex AI 簡介

這個研究室使用 Google Cloud 最新的 AI 產品服務。Vertex AI 將 Google Cloud 中的機器學習產品整合到流暢的開發體驗中。先前使用 AutoML 訓練的模型和自訂模型,都能透過不同的服務存取。這項新產品會與其他新產品一起合併為一個 API。您也可以將現有專案遷移至 Vertex AI。如有任何意見回饋,請前往支援頁面

Vertex AI 提供許多不同的產品,可支援端對端機器學習工作流程。本研究室著重於 Vertex AI Workbench

Vertex AI Workbench 可與資料服務 (例如 Dataproc、Dataflow、BigQuery 和 Dataplex) 及 Vertex AI 深度整合,協助使用者快速建立以筆記本為基礎的端對端工作流程。可讓數據資料學家連結至 GCP 資料服務、分析資料集、測試不同的建模技術、將經過訓練的模型部署至實際工作環境,並透過模型生命週期管理機器學習運作。

3. 用途總覽

在本研究室中,您將運用遷移學習,在 TensorFlow DatasetsDeepWeeds 資料集中訓練圖片分類模型。您將使用 TensorFlow Hub 實驗從不同的模型架構 (例如 ResNet50InceptionMobileNet) 中擷取的特徵向量,而這些特徵都是透過 ImageNet 基準資料集預先訓練。透過 Vertex AI Workbench 使用者介面使用筆記本執行工具,您就會在 Vertex AI 訓練中啟動工作,使用這些預先訓練模型並重新訓練最後一層,以辨識 DeepWeeds 資料集內的類別。

4. 設定環境

您必須擁有啟用計費功能的 Google Cloud Platform 專案,才能執行這個程式碼研究室。如要建立專案,請按照這裡的操作說明進行。

步驟 1:啟用 Compute Engine API

前往「Compute Engine」,並選取「啟用」 (如果尚未啟用)。

步驟 2:啟用 Vertex AI API

前往 Cloud 控制台的 Vertex AI 專區,然後點選「啟用 Vertex AI API」

Vertex AI 資訊主頁

步驟 3:建立 Vertex AI Workbench 執行個體

在 Cloud 控制台的 Vertex AI 專區中,按一下「Workbench」:

Vertex AI 選單

啟用 Notebooks API (如果尚未啟用)。

Notebook_api

啟用後,按一下「代管的筆記本」

Notebooks_UI

然後選取「新增筆記本」

new_notebook

為筆記本命名,然後點選「進階設定」

create_notebook

在進階設定下方啟用閒置關閉,並將時間長度設為 60。也就是說,筆記型電腦會在閒置時自動關機,避免產生不必要的費用。

idle_timeout

其他進階設定皆可保持原樣。

接著點選「建立」

執行個體建立完成後,請選取「Open JupyterLab」

open_jupyterlab

首次使用新的執行個體時,系統會要求您進行驗證。

驗證

Vertex AI Workbench 提供運算相容性層,可讓您從單一筆記本執行個體啟動 TensorFlow、PySpark、R 等核心。驗證後,您就可以在啟動器中選取要使用的筆記本類型。

在本研究室中,請選取 TensorFlow 2 核心。

tf_kernel

5. 編寫訓練程式碼

DeepWeeds 資料集包含 17,509 張圖片,攝取澳洲原生的八種各種雜草物種。在本節中,您將編寫程式碼來預先處理 DeepWeeds 資料集,並使用從 TensorFlow Hub 下載的特徵向量建構及訓練圖片分類模型。

您必須複製下列程式碼片段到筆記本的儲存格。執行儲存格為選用項目。

步驟 1:下載及預先處理資料集

首先,請安裝夜間的 TensorFlow 資料集,確保系統取得的是最新版本的 DeepWeeds 資料集。

!pip install tfds-nightly

接著,匯入必要的程式庫:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

從 TensorFlow Datasets 下載資料,並擷取類別數量和資料集大小。

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

定義預先處理函式,將圖片資料縮放 255 倍。

def preprocess_data(image, label):
  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label

DeepWeeds 資料集不提供訓練/驗證分割。它只包含訓練資料集。在下方程式碼中,您將用到 80% 的資料進行訓練,剩下 20% 則用於驗證。

# Create train/validation splits

# Shuffle dataset
dataset = data['train'].shuffle(1000)

train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data = dataset.take(train_size)
train_data  = train_data.map(preprocess_data)
train_data  = train_data.batch(64)

validation_data = dataset.skip(train_size)
validation_data  = validation_data.map(preprocess_data)
validation_data  = validation_data.batch(64)

步驟 2:建立模型

建立訓練和驗證資料集後,您就可以開始建構模型了。TensorFlow Hub 提供特徵向量,這些向量是在沒有頂層分類層的預先訓練模型。您要使用 hub.KerasLayer 包裝預先訓練的模型,藉此建立特徵擷取器,並將 TensorFlow module 包裝為 Keras 層。接著,您將新增分類層,並使用 Keras Sequential API 建立模型。

首先,定義參數 feature_extractor_model,這是您用來做為模型基礎的 TensorFlow Hub 特徵向量名稱。

feature_extractor_model = "inception_v3"

接下來,您將將這個儲存格設為參數儲存格,這樣就能在執行階段傳入 feature_extractor_model 的值。

首先選取儲存格,然後按一下右側面板的屬性檢查器。

property_inspector

標記是新增中繼資料至筆記本的簡單方法。輸入「parameters」並按下 Enter 鍵稍後設定執行作業時,您會傳入不同的值,在本例中是 TensorFlow Hub 模型要測試的值。請注意,您必須輸入「parameters」而非任何其他字詞,因為這可讓筆記本執行程式知道要參數化的儲存格。

add_tag

再次按一下雙齒輪圖示,即可關閉屬性檢查器。

建立新的儲存格,並定義 tf_hub_uri。您在這裡要以字串內插類型替換要用做筆記本特定執行作業基礎模型的預先訓練模型名稱。根據預設,您已將 feature_extractor_model 設為 "inception_v3",但其他有效值為 "resnet_v2_50""mobilenet_v1_100_224"。您可以在 TensorFlow Hub 目錄中探索其他選項。

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

接著,使用 hub.KerasLayer 建立特徵擷取器,並傳入您在上述步驟定義的 tf_hub_uri。設定 trainable=False 引數來凍結變數,讓訓練只會修改您位於頂端的新分類器圖層。

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri,
    trainable=False)

如要完成模型,請將特徵擷取器圖層納入 tf.keras.Sequential 模型中,然後新增完全連結圖層進行分類。這個分類頭的單位數量應等於資料集中的類別數量:

model = tf.keras.Sequential([
  feature_extractor_layer,
  tf.keras.layers.Dense(units=NUM_CLASSES)
])

最後,請編譯及擬合模型。

model.compile(
  optimizer=tf.keras.optimizers.Adam(),
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics=['acc'])

model.fit(train_data, validation_data=validation_data, epochs=3)

6. 執行筆記本

按一下筆記本頂端的「Executor」圖示。

執行程式

步驟 1:設定訓練工作

為執行作業命名,並在專案中提供儲存桶。

executor_config

將機器類型設為「4 個 CPU,15 GB RAM」

並新增 1 個 NVIDIA GPU

將環境設為 TensorFlow 企業版 2.6 (GPU)。

選擇一次性執行作業。

步驟 2:設定參數

按一下「進階選項」下拉式選單,設定參數。在方塊中輸入 feature_extractor_model=resnet_v2_50。這項操作會使用 resnet_v2_50 覆寫您在筆記本中為這個參數設定的預設值 inception_v3

advanced_options

您可以保留勾選「使用預設服務帳戶」方塊。

然後按一下「提交」

步驟 3:檢視結果

您可以在控制台 UI 的「Executions」(執行作業) 分頁中,查看筆記本執行作業的狀態。

executions_UI

點選執行名稱,即可前往 Vertex AI 訓練工作,該工作會執行筆記本。

vertex_training

工作完成後,點選「查看結果」即可查看輸出筆記本。

view_result

在輸出筆記本中,您會看到 feature_extractor_model 的值已由您在執行階段傳遞的值覆寫。

param_cells

🎉 恭喜!🎉

您已瞭解如何使用 Vertex AI Workbench 執行下列操作:

  • 在筆記本中使用參數
  • 透過 Vertex AI Workbench 使用者介面設定及啟動筆記本執行作業

如要進一步瞭解 Vertex AI 的其他部分,請參閱說明文件

7. 清理

根據預設,代管型筆記本會在閒置 180 分鐘後自動關閉。如要手動關閉執行個體,請前往控制台的「Vertex AI Workbench」專區,然後按一下「Stop」按鈕。如想完全刪除筆記本,請按一下「刪除」按鈕。

刪除

如要刪除 Storage 值區,請使用 Cloud 控制台中的導覽選單前往「Storage」(儲存空間)、選取值區,然後點選「Delete」(刪除):

刪除儲存空間