AIA (AI Adventures)系列現(xiàn)在已經(jīng)進(jìn)入第三期了。前兩期分享當(dāng)中,Yufeng 介紹了機(jī)器學(xué)習(xí)的核心概念、基本邏輯,也介紹了要進(jìn)行機(jī)器學(xué)習(xí)需要經(jīng)過哪些步驟。今天的分享中,他會(huì)繼續(xù)用淺顯易懂的表達(dá),為我們介紹 TensorFlow 的評(píng)估器 API。
總的來說,機(jī)器學(xué)習(xí)還是非常贊的(當(dāng)然,除了某些時(shí)候你不得不對(duì)付復(fù)雜惱人的數(shù)學(xué)運(yùn)算)。當(dāng)下機(jī)器學(xué)習(xí)相關(guān)工具已經(jīng)得到很大的改善,并且訓(xùn)練模型也更加簡(jiǎn)單方便。
我們將利用對(duì)數(shù)據(jù)集的認(rèn)知來編寫與之對(duì)應(yīng)的模型,而不是基于對(duì)原始數(shù)學(xué)問題來求解,本期,我們將會(huì)用一些簡(jiǎn)單的代碼來實(shí)操訓(xùn)練出一個(gè)簡(jiǎn)單的分類器
TensorFlow 中專門解決機(jī)器學(xué)習(xí)問題的評(píng)估器
要訓(xùn)練我們的分類模型,我們需要使用 Google 的開源機(jī)器學(xué)習(xí)庫——TensorFlow。TensorFlow 對(duì)外開放了非常豐富的 API 接口,但此時(shí)我們需要用到的僅僅是一些高層次 API,也就是評(píng)估器(Estimator)。
評(píng)估器替我們打包好了訓(xùn)練的循環(huán)迭代,所以我們可以通過配置評(píng)估器來控制訓(xùn)練過程,而不是手動(dòng)編碼實(shí)現(xiàn)。這樣以來,許多樣板化的東西都不再存在,也讓我們能夠在更高級(jí)的抽象中考慮問題。同時(shí)這也意味著盡情享受機(jī)器學(xué)習(xí)的樂趣,而不必糾結(jié)實(shí)現(xiàn)的細(xì)節(jié)。
既然目前我們只探討過線性模型的設(shè)計(jì)問題,不妨就此打住。今后我們會(huì)有機(jī)會(huì)回過頭討論這個(gè)問題,并提升其識(shí)別能力。
花卉分類:是否和酒水判別同樣充滿趣味?
本周我們會(huì)構(gòu)建一個(gè)模型來區(qū)分三種非常相似的花卉。雖說這次比不上上次那樣同酒水打交道那么令人向往,但是由于花卉更難辨認(rèn),所以這次的任務(wù)會(huì)更具挑戰(zhàn)性。
上期文章AIA 系列第二課 | 機(jī)器學(xué)習(xí)常見的七個(gè)步驟
特別是,今天我們需要區(qū)分開不同品種的鳶尾花。其實(shí)我自己不太能從一片玫瑰當(dāng)中找出一枝鳶尾花,但是我們的模型將會(huì)準(zhǔn)確認(rèn)出山鳶尾、變色鳶尾和維吉尼亞鳶尾。
山鳶尾、變色鳶尾和維吉尼亞鳶尾
我們有一個(gè)數(shù)據(jù)集(如下圖)記錄了花卉的花瓣、萼片的寬高數(shù)據(jù)。表中的四列也就是之前提到的「特征」。
載入數(shù)據(jù)
在引入 TensorFlow 和 NumPy 兩個(gè)模塊后,我們需要使用 TensorFlow 的 load_csv_with_header()函數(shù)來加載數(shù)據(jù)集。這些數(shù)據(jù)(或者說特征),都以浮點(diǎn)數(shù)的形式呈現(xiàn),而每一列數(shù)據(jù)、目標(biāo)花卉的標(biāo)記則用 0、1 和 2 來表示,與三種花卉的品類相對(duì)應(yīng)。
此時(shí)我已經(jīng)將數(shù)據(jù)加載的結(jié)果輸出來了,現(xiàn)在我們可以通過命名屬性來取得訓(xùn)練數(shù)據(jù)和相關(guān)的標(biāo)記、目標(biāo)。
構(gòu)建模型
下一步我們需要構(gòu)建模型了。為了完成這一步操作,首先需要設(shè)定特征列。特征列定義了進(jìn)入模型當(dāng)中的數(shù)據(jù)類型。我們使用四個(gè)維度的特征列來表示數(shù)據(jù)集中的特征,并將之稱為「花卉特征」。
要搞定評(píng)估器非常簡(jiǎn)單。 通過把特征列、模型預(yù)測(cè)的輸出數(shù)量(此處為 3)和指定的用于存儲(chǔ)模型訓(xùn)練進(jìn)程以及輸出結(jié)果的目錄傳入tf.estimator.LinearClassifier() 函數(shù)就能實(shí)例化模型了。這些參數(shù)有助于讓 TensorFlow 從中斷點(diǎn)繼續(xù)之前的訓(xùn)練。
輸入函數(shù)
上述的 classifier 對(duì)象會(huì)為我們記錄訓(xùn)練狀態(tài),此時(shí)差不多可以開始訓(xùn)練了。勝利在望,我們的模型距離成功連接訓(xùn)練數(shù)據(jù)僅僅只差一個(gè)輸入函數(shù)。輸入函數(shù)的主要工作是創(chuàng)建一個(gè)可以為模型生成數(shù)據(jù)的 TensorFlow 算子。
現(xiàn)在,所以我們已經(jīng)完成了從處理原始數(shù)據(jù),到創(chuàng)建輸入函數(shù)(傳入之后會(huì)以特征列來映射的數(shù)據(jù))的過程。要注意的是我們使用與元數(shù)據(jù)中同樣的特征列名作為特征值的標(biāo)記,這樣數(shù)據(jù)與模型訓(xùn)練才能對(duì)應(yīng)起來。
開始訓(xùn)練
接下來開展訓(xùn)練工作。只需將輸入函數(shù)傳入 classifier.train() 方法就可以了。我們就是這樣將數(shù)據(jù)與模型聯(lián)系起來的。
訓(xùn)練函數(shù)會(huì)控制在數(shù)據(jù)集上循環(huán)或迭代的過程,同時(shí)在每一階中不斷提升自身性能。正如我們所料,下圖顯示已經(jīng)成功完成了 1000 個(gè)階的訓(xùn)練!我們的數(shù)據(jù)集并不算大,所以這個(gè)過程非???。
精確度評(píng)估
好啦,是時(shí)候評(píng)估結(jié)果了。由于前面的 classifier 對(duì)象保存了模型訓(xùn)練的狀態(tài),所以我們此處仍然使用同一個(gè)對(duì)象來評(píng)估。要評(píng)估模型的優(yōu)劣,我們通過調(diào)用 classifier.evaluate() 并傳入測(cè)試數(shù)據(jù),然后從返回的矩陣當(dāng)中提取出精確度數(shù)據(jù)即可。
快看!得到的精確度是 96.88%,厲害了我的哥!
評(píng)估器:一路向前的流水線
這周就先進(jìn)行到這里,一起來回顧學(xué)習(xí)評(píng)估器的收獲:
Estimator API 為我們提供了一個(gè)優(yōu)秀的流水線用于獲取元數(shù)據(jù)、傳入輸入函數(shù)、配置特征列和模型結(jié)構(gòu)、運(yùn)行訓(xùn)練過程和進(jìn)行預(yù)測(cè)。這個(gè)易于理解的框架讓我們能夠關(guān)注數(shù)據(jù)和他們的屬性,而不需要一直糾結(jié)數(shù)學(xué)上的問題,實(shí)在是贊!
-
API
+關(guān)注
關(guān)注
2文章
1510瀏覽量
62394 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
133084
原文標(biāo)題:Google AIA 系列 | 無需數(shù)學(xué)知識(shí),輕松搞定鳶尾花辨識(shí)模型
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論