歡迎使用「Hello, World」機器學習相關工具。

1. 事前準備

在這個程式碼研究室中,您將會瞭解基本的「Hello, World」機器學習,而不是在 Java 或 C++ 等語言中編寫明確規則,而是建構一套針對資料進行訓練的系統,以推論決定數字關係的規則。

請思考以下問題:您建構的系統是用於追蹤健身活動的活動辨識。您可能可以存取使用者步行的速度,並嘗試利用某個條件來根據活動速度推斷活動。

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

您可以延長使用其他條件來執行這項作業。

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

在最終環境中,你還可以偵測出單車。

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

現在,請思考你想將活動 (例如高爾夫球) 的影響。我們不太清楚該如何建立規則來決定活動。

fc772abb6fee2804.png

// Now what?

您撰寫一個能夠辨識高爾夫球活動的程式,很難說什麼。那該怎麼做?您可以使用機器學習技術來解決問題!

事前準備

在嘗試這個程式碼研究室之前,您必須:

  • Python 的穩固知識
  • 基本程式設計技巧

您將會瞭解的內容

  • 機器學習的基本知識

建構項目

  • 您的第一個機器學習模型

軟硬體需求

如果你從未使用 TensorFlow 建立機器學習模型,則可以使用以瀏覽器為基礎的環境,其中包含所有必要的依附元件。您可以找到在 Colab 中執行的其他程式碼研究室程式碼。

如果您使用其他 IDE,請確認您已安裝 Python。你也需要 TensorFlow 和 NumPy 程式庫。您可以前往這個網頁,進一步瞭解及安裝 TensorFlow。在這裡安裝 NumPy。

2. 什麼是機器學習?

以傳統的方式建構應用程式,如下圖所示:

c72f871306134e45.png

您以程式設計語言撰寫了規則。根據資料採取行動,而您的計劃會提供答案**。** 進行活動偵測時,我們根據資料 (該人的移動速度) 所設的規則 (負責撰寫活動程式碼) 產生答案:用來判斷使用者活動狀態 (例如步行、跑步、騎自行車或執行其他操作) 的傳回值。

透過機器學習偵測活動狀態的程序十分類似,只有軸線是不一樣的。

9b85a337ee816e1b.png

與其嘗試定義規則並用程式設計語言編寫規則,您可以提供答案 (通常稱為「標籤」) 和資料,並推斷出決定答案與資料之間的關係的規則。舉例來說,您的活動偵測情境可能在機器學習內容中看起來像這樣:

6ff58697a85931f4.png

您收集到大量的資料並加上標籤,以便清楚說出「這是行走的感覺」,或「這是跑步的感覺。」如此一來,電腦就可以從資料中推斷出判斷特定活動的各種模式。

除了上述情況的替代方案外,此方法還能讓您開啟新情境,例如在以規則為基礎的傳統程式設計方法下可能無法使用的高爾夫。

在傳統程式設計中,您的程式碼會編譯成一個稱為「程式」的二進位檔。在機器學習中,您透過資料和標籤建立的項目稱為「模型」

因此,如果您回到這個圖表:

53ff9e2cb511936e.png

您可以將此結果視為一個模型,在執行階段中使用:

693430bb4d7fa001.png

讓模型傳送一些資料,而模型會使用從訓練中推測出的規則進行預測,例如「該資料看起來像是步行」、「」或「資料看起來像是騎腳踏車」。

3. 建立您的第一個機器學習模型

請考慮下列幾組數字。你能看出它們之間的關係嗎?

X:

-1

0

1

2 次

3

4

Y:

-2

1

4

7

10

13

查看它們時,您可能注意到 X 的值增加到 1 ,因為您自左為右,而 Y 的相應值增加了 3。你認為 Y 等於 3 倍加減號。然後,你可能將 X 上的 0 看為 0,看到 Y 是 1,你是想出 Y=3X+1 的關係。

這幾乎是你運用程式碼訓練模型來找出資料中的模式的方式。

現在,我們來檢查一下程式碼吧!

你要如何訓練類神經網路執行同等工作?使用資料!您只要提供一組 X 和一組 Y 做為動態饋給值,就能找出它們之間的關係。

匯入

從匯入作業開始。你正在匯入 TensorFlow 並呼叫 tf,以便使用。

接下來,匯入名為 numpy 的程式庫,可輕鬆迅速地將您的資料顯示為清單。

將類神經網路定義為一組連續層的架構,也稱為 keras,因此也請您匯入該架構。

import tensorflow as tf
import numpy as np
from tensorflow import keras

定義及編譯類神經網路

接著,建立最簡單的類神經網路。有一個圖層,該圖層具有一個神經元,而輸入的圖形只是一個值。

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

接著撰寫程式碼,以編譯類神經網路。執行時,您必須指定兩個函式:lossoptimizer

在本範例中,您知道數字之間的關係是 Y=3X+1。

電腦嘗試了它,它就猜出了,可能是 Y=10X+10。loss 函式會根據已知的正確答案,評估猜測結果的答案,並評估其表現如何。

接下來,模型會使用 optimizer 函式來猜測。根據損失函式的結果,它會嘗試盡可能減少損失。此時,它可能會想出類似 Y=5X+5 的東西。雖然這樣還是很不理想,但更接近正確的結果 (損失變小)。

這個模型會針對「訓練週期」數量重複,因此很快就會顯示。

首先,本文將說明如何使用 mean_squared_error 來計算損失,以及最佳化工具的隨機梯度下降 (sgd)。你還是不瞭解這些數學的算法,但可以看出它們是有效的!

使用一段時間後,您會瞭解各種情況的適當損失和最佳化工具功能,以及不同的情況。

model.compile(optimizer='sgd', loss='mean_squared_error')

提供資料

接著,請上傳一些資料。在這個例子中,您從較早使用的六個 X 和六個 Y 變數中取出。您可以看到兩者之間之間的關係是 Y=3X+1,因此 X 是 -1,Y 是 -2。

名為 NumPy 的 Python 程式庫提供許多陣列類型的資料結構可執行這項操作。在 np.array[] 中,將值指定為 NumPy 中的陣列。

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)

現在您已經取得定義類神經網路所需的一切程式碼。下一步是訓練模型,看看它是否能推論這些數字之間的模式,並利用這些模式建立模型。

4. 訓練類神經網路

訓練類神經網路的處理程序,其中的「X」與「Y」是「model.fit」的呼叫,用於瞭解類神經網路。而這其實會造成如此就能根據您指定的 Epoch 紀元時間執行這項作業。執行該程式碼後,您會發現每個 Epoch 的損失都會遺失。

model.fit(xs, ys, epochs=500)

例如,您可以看到前幾個訓練週期的損失值很大,但是每個步驟變小了。

f110d5abed07c1b9.png

隨著訓練進度逐漸減少,損失會變小。

81ca5e71298b414b.png

訓練完成之後,損失率極低,表示我們的模型已推斷出推論數字間的關聯。

12b187014b639fd.png

您可能不需要全部 500 個訓練週期,並且可以用不同的金額進行實驗。從示例中可看出,損失只要 50 個訓練週期就很小,所以這應該已經夠了!

5. 使用

您有模型經過訓練,以便瞭解 X 和 Y 之間的關係。您可以使用 model.predict 方法,針對先前未知的 X 設定 Y。舉例來說,如果 X 是 10,您覺得 Y 會是什麼?執行以下程式碼之前,請先進行檢查:

print(model.predict([10.0]))

您可能想到 31 歲,但最後就有點了,原因為何?

神經網絡為概率,因此計算 X 和 Y 之間的關係很有可能很高的概率是 Y=3X+1,但它不能知道只有六個數據點。結果非常接近 31,但不一定就是 31。

使用類神經網路時,你會發現這種模式會不斷出現。您幾乎可以處理各種能力,而非不確定性,而且只要進行一些程式設計,即可根據結果瞭解結果,特別是在分類時。

6. 恭喜

相信這個概念確實涵蓋了機器學習的大部分概念,而且在更複雜的情境中將會派上用場。您已經學習如何使用類神經網路來訓練類神經網路,找出兩組數字之間的關係。您定義了一組包含神經元 (在本案例中僅一個圖層) 的圖層,接著您又使用損失函式和最佳化工具來編譯了這些圖層。

網路、損失函式和最佳化工具的集合會處理各數字之間的關係,並衡量其成效,然後產生新的參數供新猜測。詳情請參閱 TensorFlow.org

瞭解詳情

如要瞭解機器學習和 TensorFlow 如何協助您的電腦視覺模型,請參閱使用 TensorFlow 建構電腦視覺模型