arrow_back

TensorFlow:Qwik Start

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

TensorFlow:Qwik Start

实验 45 分钟 universal_currency_alt 1 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP637

Google Cloud 自修研究室標誌

總覽

本實驗室將說明機器學習的基礎模型「Hello World」。您將建構的系統是根據資料訓練,來推論並決定數字間關係的規則,不是用 Java 或 C++ 等語言編寫精確的規則。

目標

本實驗室的學習內容包括:

  • 在 Jupyter 筆記本設定開發環境
  • 設計機器學習模型
  • 訓練類神經網路
  • 測試模型

設定和需求

點選「Start Lab」按鈕前的須知事項

請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。

您將在真正的雲端環境中完成實作研究室活動,而不是在模擬或示範環境。為達此目的,我們會提供新的暫時憑證,讓您用來在研究室活動期間登入及存取 Google Cloud。

如要完成這個研究室活動,請先確認:

  • 您可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意:請使用無痕模式或私密瀏覽視窗執行此研究室。這可以防止個人帳戶和學生帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成研究室活動了!別忘了,活動一開始將無法暫停。
注意:如果您擁有個人 Google Cloud 帳戶或專案,請勿用於本研究室,以免產生額外費用。

簡介

請思考下列問題:您正在建構健身狀況追蹤系統,要執行動作辨識功能。您可能有某人的移動速度,並想根據這個速度,使用條件式推論出此人的活動:

if(speed<4){ status=WALKING; }
  • 您可以延伸以上條件式,加入另一項條件「跑步」
if(speed<4){ status=WALKING; } else { status=RUNNING; }
  • 使用相同方式加入另一項條件,即可偵測「騎自行車」
if(speed<4){ status=WALKING; } else if(speed<12){ status=RUNNING; } else { status=BIKING; }
  • 現在請思考,如果想加入「打高爾夫球」這類活動,會發生什麼事?若要建立判斷活動的規則,就沒那麼清楚了。
// Now what?

如要以程式碼編寫偵測打高爾夫球活動的程式,會極為困難。

所以要怎麼做?機器學習可以解決這個問題!

什麼是機器學習?

上一節中有個問題,要您嘗試判斷使用者的健身活動。如要偵測打高爾夫球這類活動,程式碼的條件必定更加複雜,因此您遇上了程式碼的限制。

以傳統方式建構應用程式的過程如下:

圖表顯示傳統程式設計的流程:輸入規則和資料,然後輸出答案

您使用程式設計語言表達規則,這些規則以資料為依據,您的程式會提供答案。在活動偵測的範例中,規則 (為定義活動類型而編寫的程式碼) 會依據資料 (某人的移動速度) 來找出答案,也就是判斷使用者活動狀態 (走路、跑步、騎自行車等) 函式傳回的值。

運用機器學習偵測這些活動的過程與此十分類似,只有軸不同:

圖表顯示機器學習的流程:輸入答案和資料,然後輸出規則

您會同時提供答案 (通常稱為標籤) 和資料,不必嘗試定義規則並以程式設計語言表達,機器就會判斷答案與資料間的關係,並推論出規則。舉例來說,在機器學習的脈絡中,活動偵測情境應該像這樣:

走路、跑步、騎自行車和打高爾夫球四個標籤,以零和一表示

只要收集大量資料並加上標籤,有效說明「這是走路的狀態」、「這是跑步的狀態」等,電腦就能依資料判斷特定活動的獨特模式,推論出規則。

機器學習不僅是為此情境編寫程式的替代方法,還能應用於打高爾夫球等新情境,解決傳統規則型程式設計方法難以處理的問題。

在傳統程式設計中,程式碼會編譯成二進位檔,通常稱為程式。在機器學習中,從資料和標籤建立的項目稱為模型。

所以,如果回到這個圖表:

圖表顯示機器學習的流程:輸入答案和資料,然後輸出規則

將上圖的結果視為模型,在執行階段的運用方式如下:

圖表顯示在模型中輸入資料並輸出預測的流程

模型取得一些資料,使用訓練時推論出的規則來生成預測,即「這筆資料像是在走路」、「這筆資料像是在騎自行車」等。

在本實驗室中,您將使用構成元素,建構非常簡單的「Hello World」模型,且能用於任何機器學習情境!

工作 1:開啟 Vertex AI Workbench 中的筆記本

  1. 前往 Google Cloud 控制台,依序點選「導覽選單」>「Vertex AI」>「Workbench」

  2. 找出 執行個體,點選「Open JupyterLab」按鈕。

Workbench 執行個體的 JupyterLab 介面會在新瀏覽器分頁中開啟。

安裝 TensorFlow 和其他套件

  1. 在「Launcher」選單中的「Other」底下,選取「Terminal」

  2. 檢查 Python 環境是否已設定完成,然後複製下列指令,貼到終端機。

python --version

輸出內容範例:

Python 3.10.14
  1. 執行下列指令,安裝 TensorFlow 套件。
pip3 install tensorflow
  1. 在終端機執行下列指令,更新 pip3
pip3 install --upgrade pip

Pylint 是檢查 Python 程式碼錯誤的工具,可以標出 Python 原始碼中的語法和樣式問題。

  1. 執行下列指令,安裝 pylint 套件。
pip install -U pylint --user
  1. requirements.txt 檔案中,安裝實驗室所需的套件:
pip install -r requirements.txt

現在環境已設定完畢!

工作 2:建立第一個機器學習模型

請查看下列數字組。您是否能看出數字間的關係?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

若從左讀到右,您會注意到 X 值是公差為 1 的數列,Y 值則是公差為 3 的數列,所以關係應該是 Y=3X 加上或減去某數值。

接下來看看 X 值 0,對應的 Y 值是 1。

從以上兩項觀察結果,可以判斷出關係是 Y=3X+1

上述推論過程很接近使用程式碼訓練模型,找出資料規律的方法,這類模型又稱為類神經網路

您將使用資料訓練類神經網路。類神經網路收到一組 X 值和 Y 值後,應該要能辨識數值間的關係。

建立新筆記本和匯入程式庫

  1. 點選 Workbench 左側的 + 圖示,開啟新的啟動器。

  2. 在「Launcher」選單中的「Notebook」底下,選取「Python3」

新的筆記本檔案

畫面將顯示新的 Jupyter 筆記本。如要進一步瞭解如何使用 Jupyter 筆記本,請參閱 Jupyter Notebook 說明文件

  1. 匯入並設定 Cloud Logging 的 logginggoogle-cloud-logging在第一個儲存格中新增下列程式碼:
import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler())
  1. 匯入 tensorflow 來訓練和評估模型,並命名為 tf 以方便使用,然後在第一個儲存格中新增下列程式碼。
# Import TensorFlow import tensorflow as tf
  1. 匯入 numpy 來剖析資料,達到偵錯目的,並命名為 np 以方便使用,然後在第一個儲存格中新增下列程式碼。
# Import numpy import numpy as np
  1. 如要執行儲存格,請點選「Run」按鈕或按下 Shift + Enter

  2. 儲存筆記本,然後依序點選「Files」>「Save」。將檔案命名為 model.ipynb,然後點選「OK」

注意:您可以忽略輸出內容中可能出現的警告。

準備資料

接下來,您將準備訓練模型的資料。在本實驗室中,您會使用先前用過的 6 個 X 值和 Y 值:

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

如您所見,X 值與 Y 值的關係為 Y=3x+1,所以當 X = 1,會得出 Y = 4,以此類推。

Python 程式庫 numpy 會提供大量陣列型資料架構,是標準的資料輸入方式。如要運用這些資料,請使用 np.array([]),將數值指定為 numpy 中的陣列

  1. 第二個儲存格中新增下列程式碼:
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

設計模型

在本節中,您將運用 TensorFlow 設計模型。

您將使用名為「類神經網路」的機器學習演算法,來訓練模型。您會建立最簡易的類神經網路,具備 1 層,其中含有 1 個神經元。該類神經網路的輸入內容一次只會有一個值,因此輸入內容的格式必須為 [1]。

注意:本任務後續的實驗室將進一步說明類神經網路。
  1. 第二個儲存格中新增下列程式碼:
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])

編譯模型

接下來,您將編寫程式碼來編譯類神經網路。這個步驟必須指定 2 個函式:lossoptimizer

若您已看過許多機器學習的數學原理,通常會在此處用到,不過 tf.keras 貼心地將這些原理都封裝在函式中。

  • 根據先前檢視的結果,已知數字間的關係為 y=3x+1

  • 當電腦試圖「學習」這個關係,會先猜測可能是 y=10x+10loss 函式則會依據已知的正確解答,測量電腦猜測的答案和準確度。

注意:如要進一步瞭解 tf.keras 中不同類型的損失函式,請參閱 Module: tf.keras.losses 說明文件
  • 接下來模型使用最佳化器函式,再次猜測。模型會根據損失函式的結果,嘗試將損失降至最低。此時,模型或許會得出下列答案:y=5x+5。雖然仍不正確,但有比較接近正確結果,也就是損失減少了。
注意:如要進一步瞭解 tf.keras 中不同類型的最佳化器函式,請參閱 Module: tf.keras.optimizers 說明文件
  • 模型會依照您指定的訓練週期數,重複執行上述流程。
  1. 第二個儲存格中新增下列程式碼:
model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError())

在以上程式碼片段中,您告訴模型要對損失使用 mean_squared_error,對最佳化器則使用 stochastic gradient descent (sgd)。您目前不需要理解這些程式碼的數學原理,但程式碼會順利運作!

注意:之後您就會瞭解適用於不同情境的損失和最佳化器函式。

訓練類神經網路

為了訓練類神經網路「學習」X 值和 Y 值間的關係,您會使用 model.fit

這個函式會以迴圈形式訓練模型,也就是模型會猜測、測量準確度 (即損失),使用最佳化器再猜一次。模型會按照指定的訓練週期數,重複執行上述流程 (本實驗室的設定是 500)。

  1. 第二個儲存格中新增下列程式碼:
model.fit(xs, ys, epochs=500)

在以上程式碼中,model.fit 會按照固定的訓練週期數來訓練模型。

注意:如要進一步瞭解 model.fit,請參閱 tf.keras.Model 說明文件中的「fit」一節。

現在檔案應該像這樣 (請注意,程式碼會位於兩個不同儲存格):

import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler()) import tensorflow as tf import numpy as np xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float) model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])]) model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError()) model.fit(xs, ys, epochs=500)

執行程式碼

指令碼已準備就緒!執行指令碼,看看會發生什麼事。

  1. 點選「Run」按鈕或按下 Shift + Enter,即可執行筆記本中的第二個儲存格。

  2. 查看輸出內容。請注意,指令碼會顯示每次訓練週期的損失。您的輸出內容可能會與此處稍有不同。

注意:值中含有 e- 的數字是科學記號的負指數。

捲動瀏覽訓練週期時,您會看到前幾個訓練週期的損失很多,但之後逐漸減少。例如:

多列訓練週期損失,且損失逐漸減少。第二列訓練週期損失是 52.1992,第九列則是 9.7403

隨著訓練進行,損失會變得非常少:

第 45 列的訓練週期損失是 0.0023,第 54 列則是 7.1057e-04

在訓練結束前,損失會變得極少,表示模型可以很準確地推論數字間的關係:

第 495 列的訓練週期損失是 5.4194e-08,第 500 列則是 4.8896e-08

您可能不需要 500 個這麼多的訓練週期,可試試不同數值。以這個範例來說,僅 50 個訓練週期後,損失就已經非常少,所以可能這樣就夠了!

點選「Check my progress」,確認目標已達成。 建立機器學習模型

使用模型

現在您已訓練模型學習 X 值和 Y 值間的關係。

使用 model.predict 方法,可以為之前模型訓練時沒有出現的 X 值,找出對應的 Y 值。例如 X = 10,那 Y 值會是多少?

  1. 第三個儲存格中新增下列程式碼,做出預測:
cloud_logger.info(str(model.predict(np.array([10.0])))) 注意:為了產生可以檢查進度的 Cloud 記錄,預測結果會傳遞至 cloud_logger
  1. 按下 Ctrl+s 或依序點選「File」->「Save」,儲存筆記本。

  2. 如要執行第三個儲存格,請點選「Run」按鈕或按下 Shift + Enter

Y 值會列於訓練記錄之後 (訓練週期)。

輸出內容範例:

Y 值是 31.005917

您可能會以為 Y=31,但結果超出了一點 (31.005917)。為什麼會這樣呢?

答案:類神經網路與「機率」有關。類神經網路計算出 X 和 Y 之間的關係很有可能是 Y=3X+1,但只有 6 個資料點,無法確定這個關係是否正確。因此,10 的結果會很接近 31,但不一定是 31。

運用類神經網路的過程中,這個模式會重複出現。您將處理的幾乎都是機率而非確切數值,因此要寫些程式,依據機率找出結果,執行分類工作時更是如此。

點選「Check my progress」,確認目標已達成。 使用模型

恭喜!

恭喜!在本實驗室中,您已使用 TensorFlow 建立、訓練並測試自己的機器學習模型。

後續步驟/瞭解詳情

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2024 年 9 月 16 日

實驗室上次測試日期:2024 年 9 月 16 日

Copyright 2024 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您