機器學習

How Smart Tools Are Shaping the Future of Creative Work

Eric Chuang
2021-06-15
  1. 下載資料集
  2. 點擊 [導覽選單] > [AI 平台 (AI Platform)] > [筆記本 (Notebook)]。
  3. 點擊 [新增執行個體 (New Instance)],選擇最新版的 TensorFlow Enterprise,並選擇 Without GPUs。
  4. 點擊 [開啟 JUPYTERLAB (Open JupyterLab)]。

這次的 Lab,主要都會是在 Jupyter 上實作,主要的課程也都在筆記本中。

複製範例 repo

  1. 點擊 Terminal。
  2. 執行 git clone https://github.com/GoogleCloudPlatform/training-data-analyst 指令。
  3. 打開 training-data-analyst/self-paced-labs/ai-platform-qwikstart 中的 ai_platform_qwik_start.ipynb,並逐一完成裡面的任務。
  4. 首先,點擊工具列中的 [Run] 執行筆記中的 import os 指令。

匯入資料

執行筆記中的指令碼,下載樣本資料。

mkdir data
gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/

# 定義環境變數
export TRAIN_DATA=$(pwd)/data/adult.data.csv
export EVAL_DATA=$(pwd)/data/adult.test.csv

# 檢查資料是否有效
head data/adult.data.csv

接下來要在本地執行訓練程式,首先建立 trainer 路徑與 __init__.py 空白檔案。

mkdir -p trainer
touch trainer/__init__.py

接著執行筆記本中的三段指令,建立 Python 檔案。

建立完 Python 檔案後,執行訓練,並將輸出檔存到指定的路徑中。這裡利用 MODEL_DIR 這個環境變數,指定輸出路徑到 output 中。

MODEL_DIR=output
gcloud ai-platform local train \
    --module-name trainer.task \
    --package-path trainer/ \
    --job-dir $MODEL_DIR \
    -- \
    --train-files $TRAIN_DATA \
    --eval-files $EVAL_DATA \
    --train-steps 1000 \
    --eval-steps 100
    
# 檢查是否有輸出結果
ls output/keras_export/

接著執行筆記中的 Python 程式碼片段,抽樣 adult.test.csv 中的 5 筆資料進行學習。

from trainer import util
_, _, eval_x, eval_y = util.load_data()

prediction_input = eval_x.sample(5)
prediction_targets = eval_y[prediction_input.index]
print(prediction_input)

會得出以下結果,其中類別資料會轉換為整數,將用於對照表中,而連續資料則轉換為 Z-Score:

            age  workclass  education_num  marital_status  occupation  \
6314  -0.411607          3      -0.419365               2           6   
12336  0.317732          1       1.525903               0           9   
126    0.682402          0       2.304010               2           9   
10073  1.120006          0       1.136850               2           3   
13916 -0.630409          3      -0.419365               4          10   

       relationship  race  capital_gain  capital_loss  hours_per_week  \
6314              0     4     -0.144807     -0.217119       -0.034043   
12336             1     4     -0.144807     -0.217119        1.983701   
126               5     4     -0.144807     -0.217119       -0.034043   
10073             0     4     -0.144807     -0.217119       -0.034043   
13916             1     4     -0.144807     -0.217119       -0.034043   

       native_country  
6314               38  
12336              38  
126                38  
10073              38  
13916              38 

執行下列程式,將輸入的資料轉為 JSON 格式。

import json

with open('test.json', 'w') as json_file:
  for row in prediction_input.values.tolist():
    json.dump(row, json_file)
    json_file.write('\n')

檢查 JSON 檔的內容是否正確:

cat test.json

將該資料匯入已訓練的模型中,進行預測。

gcloud ai-platform local predict \
    --model-dir output/keras_export/ \
    --json-instances ./test.json

此時,回傳的數值會如下,0-0.5 代表預測收入小於等於 5 萬美元,0.5-1 則代表大於 5 萬美元。

[0.20451265573501587]
[0.37865954637527466]
[0.7607640027999878]
[0.7124574184417725]
[0.02481493353843689]

在雲端執行訓練

定義環境變數,供之後使用

export PROJECT=$(gcloud config list project --format "value(core.project)")
echo "Your current GCP Project Name is: "${PROJECT}

在進行 Lab 的時候,記得將專案名稱複製,取代下一個指令

PROJECT = "{{剛才的 PROJECT 名稱}}"  # Replace with your project name
BUCKET_NAME=PROJECT+"-aiplatform"
REGION="us-central1"

將資訊存入最早定義的 os 物件中。

os.environ["PROJECT"] = PROJECT
os.environ["BUCKET_NAME"] = BUCKET_NAME
os.environ["REGION"] = REGION
os.environ["TFVERSION"] = "2.1"
os.environ["PYTHONVERSION"] = "3.7"

建立 Cloud Storage 貯體

建立一個 Cloud Storage 貯體,並將貯體名稱複製取代下列的指令。

if ! gsutil ls | grep -q gs://train-like-a-boss; then
    gsutil mb -l us gs://train-like-a-boss
fi
gsutil cp -r data gs://train-like-a-boss/data

# 重新設定環境變數
export TRAIN_DATA=gs://train-like-a-boss/data/adult.data.csv
export EVAL_DATA=gs://train-like-a-boss/data/adult.test.csv

# 複製剛才的 test.json
gsutil cp test.json gs://train-like-a-boss/data/test.json
export TEST_JSON=gs://train-like-a-boss/data/test.json

執行訓練

JOB_ID=census_$(date -u +%y%m%d_%H%M%S)
OUTPUT_PATH=gs://train-like-a-boss/$JOB_ID
gcloud ai-platform jobs submit training $JOB_ID \
    --job-dir $OUTPUT_PATH \
    --runtime-version $TFVERSION \
    --python-version $PYTHONVERSION \
    --module-name trainer.task \
    --package-path trainer/ \
    --region $REGION \
    -- \
    --train-files $TRAIN_DATA \
    --eval-files $EVAL_DATA \
    --train-steps 1000 \
    --eval-steps 100 \
    --verbosity DEBUG

將系統回傳的 jobId 存入 os 物件中

os.environ["JOB_ID"] = "census_210615_103802"

此時可以回到 [AI 平台] 的 [Jobs] 頁面中,檢視訓練的進度。或是在終端機中用指令查詢:

gcloud ai-platform jobs stream-logs $JOB_ID

部署預測用的模型

先定義 os 的模型名稱。

os.environ["MODEL_NAME"] = "census"

# 在 AI Platform 建立模型
gcloud ai-platform models create $MODEL_NAME --regions=$REGION

用 gcloud ai-platform versions create v1 發布第一個版本 v1。

OUTPUT_PATH=gs://{{貯體名稱}}/$JOB_ID
MODEL_BINARIES=$OUTPUT_PATH/keras_export/
gcloud ai-platform versions create v1 \
--model $MODEL_NAME \
--origin $MODEL_BINARIES \
--runtime-version $TFVERSION \
--python-version $PYTHONVERSION \
--region=global

檢視模型列表。

gcloud ai-platform models list

執行雲端預測。

gcloud ai-platform predict \
--model $MODEL_NAME \
--version v1 \
--json-instances ./test.json \
--region global

AI Platform 同時支援批次預測,但是並不在本次 Lab 涵蓋的範圍中。

Sign up for our newsletter

Subscribe to our newsletter to receive the latest updates, expert insights, and practical tips directly in your inbox. Stay informed with content designed to help you grow.

+480.000 happy customers

Gain more with expert solutions

Unlock the full potential of your business with our expert solutions. Our team provides tailored strategies, professional guidance, and actionable insights to help you achieve better results.

  • Eric Chuang
  • •
  • 2025-01-23
如何同時使用 Webinoly 與 Cloudflare 保護網站安全

在社群夥伴勇哥的文章〈Webinoly 最新版快速安裝〉中,提到使用 Webinoly 來建立 WordPre […]

主機