TensorFlow基礎入門

什麼是TensorFlow呢?簡單來說,就是 Google提供的開源機器學習程式庫。藉由TensorFlow可以簡易上手機器學習相關程式。

為什麼要學習TensorFlow

過去學習機器學習很困難,因為他的演算法非常複雜,但使用TensorFlow、PyTorch、caffe之類的深度學習框架可以節省非常多時間。

機器學習與傳統程式差異

在學習TensorFlow前,先簡單介紹機器學習與以前學習的程式有什麼差異,這樣對使用TensorFlow及機器學習會有更深入的了解。

傳統程式

將規則及data丟進程式中,answers會自動產生。

範例圖示

預先將程式設定為y=2x+3,只要代換x就可以得到相對應的答案。

(1)先提供方程式y=2x+3

圖1-1

(2)當x = 0,y = 3;
x = 1,y = 5,以次類推,只要給出x值就可以得到y值。

圖1-2

範例程式

y = 2x+3      // 見圖1-1
x = 1         // 見圖1-2
print(y)

結果

5

機器學習

將answers丟入程式中,機器學習會產生規則。換句話說: 我們會將一大堆範例丟進機器學習程式中,電腦會幫我找出規則。

範例圖示

預先給x及y相對應的數字,機器學習藉由訓練的方式,可以找出他們相對應的關係,並預測之後的結果。

(1)先提供x及y對應的點。

圖2-1

(2)經過機器學習training後,會找出下圖的紅線。

圖2-2

(3)最終可用找出的紅線預測出下圖的黑色菱形的位置。

圖2-3

範例程式

x = np.array([-1,  0, 1, 2, 3, 4, 5])
y = np.array([-5, -2, 1, 4, 7, 10, 13])   // 見圖2-1

model.fit(x, y, epochs=500)          // 見圖2-2
print(model.predict([8]))            // 見圖2-3

結果

[[21.985487]]

機器學習範例

以下提供完整的機器學習程式,以找出簡單的二元一次方程式為範例。

Import函式庫

如何使用TensorFlow呢?TensorFlow是用Python寫的,並使用TensorFlow裡的API,keras。使用keras讓定義神經網路變得更簡單。
所以一開始要先import TensorFlow及其API,keras。

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

神經網路
人工智慧中的一種方法,因其處理資料方式類似人腦中的神經網路,故得名神經網路。

定義及compile神經網路

再來創建一個最簡單的神經網路,僅有一個輸入層,一個神經元及一個輸出層。

Dense用來定義連接的神經層。也就是下圖的Hidden layer。

Sequence用來定義連接的layer。

input_shape就是input layer,因為輸入層只有x,所以只能填寫1。

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

在train資料時,神經網路會不斷猜測是否符合答案,這時loss function就會對猜測值與真時答案比較,而Optimizer根據loss function的結果,提供下一組資料讓神經網路不斷修正,直到training結束。

Loss function用來評估模型的預測值與真實值的差異程度。簡單來說,就是評估模型的準確度。

Optimizer用來幫助神經網路調整參數,使得loss越來越低。

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

SGD:
隨機梯度下降法,此方法為通過在隨機小批量的數據上計算loss function的梯度進而迭代更新權重及bias。簡單來說,每次隨機取一筆資料,反復計算以得到最佳結果。

SGD公式。

提供data

np.array是python的library,它可以讓資料整理變得更簡單。

xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0, 5.0], dtype=float)
ys = np.array([-5.0, -2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

Training神經網路

epochs代表有多少次訓練。500代表需訓練500次。

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

當完成訓練後,就可以預測下一個數據囉!

print(model.predict([8.0]))
[[21.97633]]

預測結果非常接近22,但卻不是22,主要有兩個原因:
1. training所使用的data太少。總共只使用7個點,所以程式無法確定每個點都是線性。
2. 使用神經網路時,他試圖找出所有可能值,這成為一個概率答案,所以他會為了得到所有可能的正確值,會調整答案。

完整code

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

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

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

xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0, 5.0], dtype=float)
ys = np.array([-5.0, -2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

model.fit(xs, ys, epochs=500)
print(model.predict([8.0]))

軟體相關文章推薦

👉【Python教學】使用Pickle序列化物件的用法介紹
👉【超快速教學】如何在Ubuntu安裝Docker,使用官方推薦方式
👉Python 3.10更新拉,5個新功能讓你寫Code效率倍增

Reference

👉Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning
👉TensorFlow

 

下面的按鈕可以直接分享🐹

歡迎留言分享你/妳的看法唷,信箱不會公開😀