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

TensorFlow 是 Google 開發的一款用於機器學習的開源軟件庫。它可以在全部 Linux,Windows和 MacOS 平臺上運行 CPU 和 GPU。Tensorflow 可用於設計,實現和訓練深度學習模型。數組

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

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

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

首先,咱們用訓練數據集來訓練咱們的模型,而後咱們會用測試數據集來測試其準確性。你能夠從這裏下載訓練數據集,並在這裏下載測試數據集。機器學習

第一步

首先,咱們須要讀取 .csv 文件中的數據並導入它們。Pandas 庫能夠很輕鬆處理這個問題。函數

Pandas 庫中的 read_csv()函數將讀取文件並將內容加載爲指定的變量。對於函數的參數, 咱們須要指定文件的路徑,names 參數能夠用來指定每一個列的名字。post

第二步

數據集中的花朵的類型都編碼爲 0,1 和 2。咱們須要使用 one hot 方法將它們編碼爲 [1,0,0],[0,1,0] 和 [0,0,1]。這將使網絡的訓練和優化變得容易,由於網絡的輸出也是以 one hot 格式生成的。性能

而後咱們須要定義訓練集的 x,y 和測試集的 x,y。學習

第三步

而後,它須要爲輸入(X),輸出(Y)定義佔位符,並定義網絡的權重和誤差。這裏咱們有 4 列輸入,由於數據集有 4 個特徵和 3 列輸出來映射 3 種類型的花。佔位符的 shape 應該知足這一點。 此外,權重矩陣的 shape 必須是 4x3,而誤差必須是 3 的向量才能將輸入映射到輸出(無隱藏層)。測試

第四步

而後咱們須要經過一個激活函數發送輸出,這裏能夠用 Tensorflow 中的 soft-max 函數。爲了該訓練模型,咱們須要計算模型的成本,也就是模型的輸出中出現了多少錯誤,這裏咱們計算平均方差。而後咱們能夠訓練模型,並使用 AdamOptimizer 下降成本。

第五步

爲了在培訓後檢查咱們的模型是否準確,咱們須要將咱們的模型預測與實際結果進行比較。而後咱們能夠經過計算咱們獲得的正確結果來計算咱們模型的準確性。

在這裏,咱們檢查由咱們的模型生成的輸出是否等於實際結果(Y)。該模型將爲每種花計算一個值,這個值能夠視爲是否爲某種花的機率。咱們選擇可能性最高的花種,argmax 函數會返回最大值的索引。記住,結果是 one hot 格式,這種方法能讓咱們很容易的檢查正確性。

在此以後,咱們須要開始訓練模型。在此以前,咱們首先須要使用 global_variables_initializer 函數初始化全部全局變量。

第六步

如今咱們開始訓練模型。每一個 Tensor 執行必須在 Tensorflow 的會話中完成。所以,在訓練以前咱們須要建立一個會話,而且在完成全部工做後,咱們須要關閉會話。

首先,執行初始化張量的變量,而後將模型訓練 1000 次。訓練時,咱們須要指定訓練數據集爲 X,相應的結果爲 Y,由於須要它們訓練張量。這裏在傳遞 Y 時,咱們會迭代和建立一個新數組,以確保它的 shape 與上面定義的相同。在每次迭代中,將成本繪製成圖形以便查看實際的訓練效果。

第七步

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

通過 1000 次訓練迭代後,能夠得到 96.67% 的準確度,這個結果確實使人印象深入,而成本變化圖清楚的顯示了每次迭代中減小成本後模型性能有了巨大改善。

本文能幫助 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這班車的最好機會,不要錯過哦。

相關文章
相關標籤/搜索