作者 | 鄭澤宇
AI前線出品| ID:ai-front
在前面的幾篇文章已經(jīng)介紹了如何使用原生態(tài)TensorFlow API來實(shí)現(xiàn)各種不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。雖然原生態(tài)的TensorFlow API可以很靈活的支持不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)或听,但是其代碼相對(duì)比較冗長乾蛤,寫起來比較麻煩裤园。為了讓TensorFlow用起來更加方便,可以使用一些TensorFlow的高層封裝。
目前對(duì)TensorFlow的主要封裝有4個(gè):
第一個(gè)是TensorFlow-Slim伞租;
第二個(gè)是tf.contrib.learn(之前也被稱為skflow)淹接;
第三個(gè)是TFLearn十性;
最后一個(gè)是Keras。
本文將大致介紹這幾種不同的高層封裝的使用方法塑悼,并通過其中常用的三種方式在MNIST數(shù)據(jù)集上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)劲适。
TensorFlow-Slim
TensorFlow-Slim是一個(gè)相對(duì)輕量級(jí)的TensorFlow高層封裝。通過TensorFlow-Slim厢蒜,定義網(wǎng)絡(luò)結(jié)構(gòu)的代碼可以得到很大程度的簡化霞势,使得整個(gè)代碼更加可讀烹植。下面的代碼對(duì)比了使用原生態(tài)TensorFlow實(shí)現(xiàn)卷積層和使用TensorFlow-Slim實(shí)現(xiàn)卷積層的代碼:
從上面的代碼可以看出,使用TensorFlow-Slim可以大幅減少代碼量愕贡。省去很多與網(wǎng)絡(luò)結(jié)構(gòu)無關(guān)的變量聲明的代碼草雕。雖然TensorFlow-Slim可以起到簡化代碼的作用,但是在實(shí)際應(yīng)用中固以,使用TensorFlow-Slim定義網(wǎng)絡(luò)結(jié)構(gòu)的情況相對(duì)較少墩虹,因?yàn)樗炔蝗缭鷳B(tài)TensorFlow的靈活,也不如下面將要介紹的其他高層封裝簡潔憨琳。但除了簡化定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的代碼量诫钓,使用TensorFlow-Slim的一個(gè)最大好處就是它直接實(shí)現(xiàn)了一些經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),并且Google提供了這些神經(jīng)網(wǎng)絡(luò)在ImageNet上訓(xùn)練好的模型篙螟。下表總結(jié)了通過TensorFlow-Slim可以直接實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)模型:
Google提供的訓(xùn)練好的模型可以在github上tensorflow/models/slim目錄下找到尖坤。在該目錄下也提供了遷移學(xué)習(xí)的案例和代碼。
tf.contrib.learn
tf.contrib.learn是TensorFlow官方提供的另外一個(gè)對(duì)TensorFlow的高層封裝闲擦,通過這個(gè)封裝慢味,用戶可以和使用sklearn類似的方法使用TensorFlow。通過tf.contrib.learn訓(xùn)練模型時(shí)墅冷,需要使用一個(gè)Estimator對(duì)象纯路。Estimator對(duì)象是tf.contrib.learn 進(jìn)行模型訓(xùn)練(train/fit)和模型評(píng)估(evaluation)的入口。
tf.contrib.learn模型提供了一些預(yù)定義的 Estimator寞忿,例如線性回歸(tf.contrib.learn.LinearRegressor)驰唬、邏輯回歸(tf.contrib.learn.LogisticRegressor)、線性分類(tf.contrib.learn.LinearClassifier)以及一些完全由全連接層構(gòu)成的深度神經(jīng)網(wǎng)絡(luò)回歸或者分類模型(tf.contrib.learn.DNNClassifier腔彰、tf.contrib.learn.DNNRegressor)叫编。
除了可以使用預(yù)先定義好的模型,tf.contrib.learn也支持自定義模型霹抛,下面的代碼給出了使用tf.contrib.learn在MNIST數(shù)據(jù)集上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的過程搓逾。更多關(guān)于tf.contrib.learn的介紹可以參考Google官方文檔。
(https://www.tensorflow.org/get_started/tflearn)
TFLearn
TensorFlow的另外一個(gè)高層封裝TFLearn進(jìn)一步簡化了tf.contrib.learn中對(duì)模型定義的方法杯拐,并提供了一些更加簡潔的方法來定義神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)霞篡。和上面兩個(gè)高層封裝不一樣,使用TFLearn需要單獨(dú)安裝端逼,安裝的方法為:
pip install tflearn
下面的代碼介紹了如何通過TFLearn來實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)朗兵。更多關(guān)于TFLearn的用法介紹可以參考TFLearn的官方網(wǎng)站(http://tflearn.org/)
運(yùn)行上面的代碼,可以得到類似如下的輸出:
Keras
Keras是一個(gè)基于TensorFlow或者Theano的高層API顶滩,在安裝好TensorFlow之后可以通過以下命令可以安裝:
下面的代碼介紹了如何通過Keras來實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)余掖。更多關(guān)于Keras的用法介紹可以參考Keras的官方網(wǎng)站(http://tflearn.org/)
運(yùn)行上面的代碼,可以得到類似如下的輸出:
作者介紹
鄭澤宇礁鲁,才云首席大數(shù)據(jù)科學(xué)家盐欺,前谷歌高級(jí)工程師赁豆。從 2013 年加入谷歌至今,鄭澤宇作為主要技術(shù)人員參與并領(lǐng)導(dǎo)了多個(gè)大數(shù)據(jù)項(xiàng)目找田,擁有豐富機(jī)器學(xué)習(xí)歌憨、數(shù)據(jù)挖掘工業(yè)界及科研項(xiàng)目經(jīng)驗(yàn)着憨。2014 年墩衙,他提出產(chǎn)品聚類項(xiàng)目用于銜接谷歌購物和谷歌知識(shí)圖譜(Knowledge Graph)數(shù)據(jù),使得知識(shí)卡片形式的廣告逐步取代傳統(tǒng)的產(chǎn)品列表廣告甲抖,開啟了谷歌購物廣告在搜索頁面投遞的新紀(jì)元漆改。他于2013 年 5 月獲得美國 Carnegie Mellon University(CMU)大學(xué)計(jì)算機(jī)碩士學(xué)位, 期間在頂級(jí)國際學(xué)術(shù)會(huì)議上發(fā)表數(shù)篇學(xué)術(shù)論文,并獲得西貝爾獎(jiǎng)學(xué)金准谚。
-全文完-
關(guān)注人工智能的落地實(shí)踐挫剑,與企業(yè)一起探尋 AI 的邊界,AICon 全球人工智能技術(shù)大會(huì)火熱售票中柱衔,8 折倒計(jì)時(shí)一周搶票樊破,詳情點(diǎn)擊:
《深入淺出TensorFlow》迷你書現(xiàn)已發(fā)布,關(guān)注公眾號(hào)“AI前線”唆铐,ID:ai-front哲戚,回復(fù)關(guān)鍵字:TF,獲取下載鏈接艾岂!