用一個小例子教你入門機器學習框架TensorFlow

景略集智發表於2018-06-01

TensorFlow 是 Google 開發的一款用於機器學習的開源軟體庫。它能夠在所有 Linux,Windows和 MacOS 平臺上執行 CPU 和 GPU。Tensorflow 可用於設計,實現和訓練深度學習模型。

今天我們就手把手教你如何使用 TensorFlow 搭建一個簡單的神經網路,實現 TensorFlow 中的Hello World,只需七步,就能迅速入門。本文我們使用著名的鳶尾花(記住這個名字,以後你會經常遇到它)資料集來訓練模型,然後讓模型為給定的花朵正確分類。

用一個小例子教你入門機器學習框架TensorFlow

鳶尾花資料集包含 3 種花,包括“山鳶尾”(Setosa),“雜色鳶尾”(Versicolor)和“維吉尼亞鳶尾”(Virginica)。為了識別每種花型,我們設定了 4 種花的屬性,包括萼片長度,萼片寬度,花瓣長度和花瓣寬度。 我們下面會用 TensorFlow 搭建一個神經網路,讓它根據這些因素正確識別出鳶尾花的種類。

我們下面會用 TensorFlow 搭建一個神經網路,讓它根據這些因素正確識別出鳶尾花的種類。

首先,我們用訓練資料集來訓練我們的模型,然後我們會用測試資料集來測試其準確性。你可以從這裡下載訓練資料集,並在這裡下載測試資料集。

第一步

首先,我們需要讀取 .csv 檔案中的資料並匯入它們。Pandas 庫可以很輕鬆處理這個問題。

Pandas 庫中的 read_csv()函式將讀取檔案並將內容載入為指定的變數。對於函式的引數, 我們需要指定檔案的路徑,names 引數可以用來指定每個列的名字。

用一個小例子教你入門機器學習框架TensorFlow

第二步

資料集中的花朵的型別都編碼為 0,1 和 2。我們需要使用 one hot 方法將它們編碼為 [1,0,0],[0,1,0] 和 [0,0,1]。這將使網路的訓練和優化變得容易,因為網路的輸出也是以 one hot 格式生成的。

然後我們需要定義訓練集的 x,y 和測試集的 x,y。

用一個小例子教你入門機器學習框架TensorFlow

第三步

然後,它需要為輸入(X),輸出(Y)定義佔位符,並定義網路的權重和偏差。這裡我們有 4 列輸入,因為資料集有 4 個特徵和 3 列輸出來對映 3 種型別的花。佔位符的 shape 應該滿足這一點。 此外,權重矩陣的 shape 必須是 4x3,而偏差必須是 3 的向量才能將輸入對映到輸出(無隱藏層)。

用一個小例子教你入門機器學習框架TensorFlow

第四步

然後我們需要通過一個啟用函式傳送輸出,這裡可以用 Tensorflow 中的 soft-max 函式。為了該訓練模型,我們需要計算模型的成本,也就是模型的輸出中出現了多少錯誤,這裡我們計算平均方差。然後我們可以訓練模型,並使用 AdamOptimizer 降低成本。

用一個小例子教你入門機器學習框架TensorFlow

第五步

為了在培訓後檢查我們的模型是否準確,我們需要將我們的模型預測與實際結果進行比較。然後我們可以通過計算我們得到的正確結果來計算我們模型的準確性。

用一個小例子教你入門機器學習框架TensorFlow
在這裡,我們檢查由我們的模型生成的輸出是否等於實際結果(Y)。該模型將為每種花計算一個值,這個值可以視為是否為某種花的概率。我們選擇可能性最高的花種,argmax 函式會返回最大值的索引。記住,結果是 one hot 格式,這種方法能讓我們很容易的檢查正確性。

在此之後,我們需要開始訓練模型。在此之前,我們首先需要使用 global_variables_initializer 函式初始化所有全域性變數。

第六步

現在我們開始訓練模型。每個 Tensor 執行必須在 Tensorflow 的會話中完成。因此,在訓練之前我們需要建立一個會話,並且在完成所有工作後,我們需要關閉會話。

用一個小例子教你入門機器學習框架TensorFlow

首先,執行初始化張量的變數,然後將模型訓練 1000 次。訓練時,我們需要指定訓練資料集為 X,相應的結果為 Y,因為需要它們訓練張量。這裡在傳遞 Y 時,我們會迭代和建立一個新陣列,以確保它的 shape 與上面定義的相同。在每次迭代中,將成本繪製成圖形以便檢視實際的訓練效果。

第七步

最後,當訓練過程結束時,將成本變化圖繪製出來並通過測試資料集測試模型的準確性。

用一個小例子教你入門機器學習框架TensorFlow

經過 1000 次訓練迭代後,可以獲得 96.67% 的準確度,這個結果確實令人印象深刻,而成本變化圖清楚的顯示了每次迭代中減少成本後模型效能有了巨大改善。

用一個小例子教你入門機器學習框架TensorFlow

本文能幫助 Tensorflow 的新手通過這個簡單的例子來了解它的概念,從此開拓 TensorFlow 的星辰大海。

下面是本教程的全部 Python 程式碼,可以在免搭環境的集智主站自己敲一敲:

import tensorflow as tf
import pandas as pd
from matplotlib import pyplot as plt

#從CSV讀取資料
train_data = pd.read_csv("iris_training.csv", names=['f1', 'f2', 'f3', 'f4', 'f5'])
test_data = pd.read_csv("iris_test.csv", names=['f1', 'f2', 'f3', 'f4', 'f5'])

#將資料編碼為獨熱
train_data['f5'] = train_data['f5'].map({0: [1, 0, 0], 1: [0, 1, 0], 2: [0, 0, 1]})
test_data['f5'] = test_data['f5'].map({0: [1, 0, 0], 1: [0, 1, 0], 2: [0, 0, 1]})

#分離訓練資料
train_x = train_data[['f1', 'f2', 'f3', 'f4']]
train_y = train_data.ix[:, 'f5']

#分離測試資料
test_x = test_data[['f1', 'f2', 'f3', 'f4']]
test_y = test_data.ix[:, 'f5']

#輸入和輸出的資料夾
X = tf.placeholder(tf.float32, [None, 4])
Y = tf.placeholder(tf.float32, [None, 3])

#權重和偏差
weight = tf.Variable(tf.zeros([4, 3]))
bias = tf.Variable(tf.zeros([3]))

#執行啟用函式後的輸出
output = tf.nn.softmax(tf.matmul(X, weight) + bias)
#cost funciton
cost = tf.reduce_mean(tf.square(Y-output))
#train model
train = tf.train.AdamOptimizer(0.01).minimize(cost)

#檢查成功與否
success = tf.equal(tf.argmax(output, 1), tf.argmax(Y, 1))
#c計算準確率
accuracy = tf.reduce_mean(tf.cast(success, tf.float32))*100

#初始化變數
init = tf.global_variables_initializer()

#啟動TensorFlow會話
with tf.Session() as sess:
    costs = []
    sess.run(init)
    #訓練模型1000次
    for i in range(1000):
        _,c = sess.run([train, cost], {X: train_x, Y: [t for t in train_y.as_matrix()]})
        costs.append(c)

    print("Training finished!")

    #繪製代價圖表
    plt.plot(range(1000), costs)
    plt.title("Cost Variation")
    plt.show()
    print("Accuracy: %.2f" %accuracy.eval({X: test_x, Y: [t for t in test_y.as_matrix()]}))
複製程式碼

對於本文教程,谷歌此前釋出過視訊版,我們進行了譯製,可以去集智主站上瞅瞅:戳這裡


新手福利

假如你是機器學習小白,但又希望能以最高效的方式學習人工智慧知識,我們這裡正好有個免費學習AI的機會,讓你從零到精通變身AI工程師,不瞭解一下?

機會傳送門:戳這裡!!

這可能是正點趕上AI這班車的最好機會,不要錯過哦。

相關文章