選單

如何使用TensorFlow構建機器學習模型

如何使用TensorFlow構建機器學習模型

作者 | Kesk

譯者 | 張健欣

策劃 | 凌敏

在這篇文章中,我將逐步講解如何使用 TensorFlow 建立一個簡單的機器學習模型。

TensorFlow 是一個由谷歌開發的庫,並在 2015 年開源,它能使構建和訓練機器學習模型變得簡單。

我們接下來要建立的模型將能夠自動將公里轉換為英里,在本例中,我們將建立一個能夠學習如何進行這種轉換的模型。我們將向這個模型提供一個 CSV (https://en。wikipedia。org/wiki/Comma-separated_values)檔案作為輸入,其中有 29 組已經執行過的公里和英里之間的轉換,基於這些資料,我們的模型將學會自動進行這種轉換。

我們將使用有監督學習演算法,因為我們知道資料的輸入和輸出結果。並使用 Python 作為程式語言。Python 提供了一系列與機器學習相關的方便的庫和工具。本例中所有的步驟都是使用 Google Colab 執行的。Google Colab 允許我們在瀏覽器上零配置地編寫和執行 Python 程式碼。

匯入必需的庫

我們首先匯入在我們的例子中將要使用到的庫。

import tensorflow as tfimport pandas as pdimport seaborn as snsimport matplotlib。pyplot as plt

我們將匯入 TensorFlow 來建立我們的機器學習模型。

我們還將匯入 Pandas 庫來讀取包含有公里和英里轉換資料的 CSV 檔案。

最後,我們將匯入 Seaborn 和 Matlotlib 庫繪製不同的結果。

載入樣例資料

我們將含有逗號分隔的值的檔案(Kilometres-miles。csv)讀取到我們的資料幀中。這個檔案包含一系列公里和英里值的轉換。我們將使用這些資料幀來訓練我們的模型。你可以在這個連結(https://drive。google。com/file/d/1m63pJA-zUAA12XOCCBt3Aik9fnjrj_8s/view?usp=sharing)下載這個檔案。

要從 Google Colab 讀取檔案,你可以使用不同的方法。在本例中,我直接將 CSV 檔案上傳到我的 Google Colab 上的 sample_data 資料夾中,但你可以從一個 URL 中讀取檔案(比如,從 GitHub)。

上傳到 Google Colab 的問題是,資料會在執行時重啟時丟失。

資料幀是二維的大小可變的並且各種各樣的表格資料。

df = pd。read_csv(‘/content/sample_data/Kilometres-miles。csv’)df。info

如何使用TensorFlow構建機器學習模型

示例資料資訊

繪製資料幀

我們將“searborn”庫的“scatterplot”匯入並命名為“sns”,然後使用這個庫來繪製上述圖形。它顯示了 X(公里)和 Y(英里)對應關係的圖形化表示。

print(“Painting the correlations”)#Once we load seaborn into the session, everytime a matplotlib plot is executed, seaborn‘s default customizations are addedsns。scatterplot(df[’Kilometres‘], df[’Miles‘])plt。show()

如何使用TensorFlow構建機器學習模型

公里和英里的相關性

我們定義資料幀的輸入和輸出來訓練模型:

X(公里)是輸入,Y(英里)是輸出。

print(“Define input(X) and output(Y) variables”)X_train=df[’Kilometres‘]y_train=df[’Miles‘]

建立神經網路

現在,讓我們使用“keras。Sequential”方法來建立一個神經網路,其中依次新增“layers”。每一個層(layer)都具有逐步提取輸入資料以獲得所需輸出的功能。Keras  是一個用 Python 寫的庫,我們建立神經網路並使用不同的機器學習框架,例如 TensorFlow。

接下來,我們將使用“add”方法向模型新增一個層。

print(“Creating the model”)model = tf。keras。Sequential()model。add(tf。keras。layers。Dense(units=1,input_shape=[1]))

建立神經網路

編譯模型

在訓練我們的模型之前,我們將在編譯步驟中新增一些額外設定。

我們將設定一個最佳化器和損失函式,它們會測量我們的模型的準確性。Adam 最佳化是一種基於第一次和第二次矩的自適應預算的隨機梯度下降演算法。

為此,我們將使用基於平均方差的損失函式,它測量了我們預測的平均方差。

我們的模型的目標是最小化這個函式。

print(“Compiling the model”)model。compile(optimizer=tf。keras。optimizers。Adam(1), loss=’mean_squared_error‘)

訓練模型

我們將使用“擬合(fit)”方法來訓練我們的模型。首先,我們傳入獨立變數或輸入變數(X-Kilometers)和目標變數(Y-Miles)。

另一方面,我們預測 epoch 的數值。在本例中,epoch 值是 250。一個 epoch 就是遍歷一遍所提供的完整的 X 和 Y 資料。

如果 epoch 的數值越小,誤差就會越大;反過來,epoch 的數值越大,則誤差就會越小。

如果 epoch 的數值越大,演算法的執行速度就會越慢。

print (“Training the model”)epochs_hist = model。fit(X_train, y_train, epochs = 250)

如何使用TensorFlow構建機器學習模型

訓練模型的控制檯

評估模型

現在,我們評估建立的模型,在該模型中,我們可以觀察到損失(Training_loss)隨著執行的遍歷次數(epoch)的增多而減少,如果訓練集資料有意義並且是一個足夠大的組,這是合乎邏輯的。

print(“Evaluating the model”)print(epochs_hist。history。keys())#graphplt。plot(epochs_hist。history[’loss‘])plt。title(’Evolution of the error associated with the model‘)plt。xlabel(’Epoch‘)plt。ylabel(’Training Loss‘)plt。legend(’Training Loss‘)plt。show()

如何使用TensorFlow構建機器學習模型

從圖中我們可以看出,用 250 次訓練模型並沒有多大幫助,在第 50 次遍歷後,誤差並沒有減少。因此,訓練該演算法的最佳遍歷數大約是 50。

進行預測

現在我們已經訓練了我們的模型,我們可以使用它來進行預測。

在本例中,我們將 100 賦值給模型的輸入變數,然後模型會返回預測的英里數:

kilometers = 100predictedMiles = model。predict([kilometers])print(“The conversion from Kilometres to Miles is as follows: ” + str(predictedMiles))

從公里到英里的換算為 62。133785。

檢查結果

milesByFormula = kilometers * 0。6214print(“The conversion from kilometers to miles using the mathematical formula is as follows:” + str(milesByFormula))diference = milesByFormula - predictedMilesprint(“Prediction error:” + str(diference))

使用公式從公里到英里的換算值為:62。13999999999999。預測誤差為 0。00621414

總  結

透過本例,我們瞭解瞭如何使用 TensorFlow 庫來建立一個模型,這個模型已經學會自動將公里數轉換為英里數,並且誤差很小。

TensorFlow 用於執行此過程的數學非常簡單。基本上,本例使用線性迴歸來建立模型,因為輸入變數(公里數)和輸出變數(英里數)是線性相關的。在機器學習中,過程中最耗時的部分通常是準備資料。

隨著時間的推移,我們收穫了一些經驗,這些經驗可以幫助我們選擇最適合的演算法及其設定,但一般來說,這是一項分析測試並改進的任務。