《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用
谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用
2017年微型機(jī)與應(yīng)用第10期
  章敏敏,,徐和平,王曉潔,,周夢(mèng)昀,,洪淑月
浙江師范大學(xué) 數(shù)理與信息工程學(xué)院,,浙江 金華 321004
摘要:   TensorFlow是谷歌的第二代開(kāi)源的人工智能學(xué)習(xí)系統(tǒng),是用來(lái)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的內(nèi)置框架學(xué)習(xí)軟件庫(kù),。目前,,TensorFlow機(jī)器學(xué)習(xí)已經(jīng)成為了一個(gè)研究熱點(diǎn)。由基本的機(jī)器學(xué)習(xí)算法入手,,簡(jiǎn)析機(jī)器學(xué)習(xí)算法與TensorFlow框架,,并通過(guò)在Linux系統(tǒng)下搭建環(huán)境,仿真手寫(xiě)字符識(shí)別的TensorFlow模型,,實(shí)現(xiàn)手寫(xiě)字符的識(shí)別,,從而實(shí)現(xiàn)TensorFlow機(jī)器學(xué)習(xí)框架的學(xué)習(xí)與應(yīng)用。
Abstract:
Key words :

  章敏敏,,徐和平,,王曉潔,周夢(mèng)昀,,洪淑月

 ?。ㄕ憬瓗煼洞髮W(xué) 數(shù)理與信息工程學(xué)院,浙江 金華 321004)

  摘要TensorFlow是谷歌的第二代開(kāi)源的人工智能學(xué)習(xí)系統(tǒng),,是用來(lái)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的內(nèi)置框架學(xué)習(xí)軟件庫(kù),。目前,,TensorFlow機(jī)器學(xué)習(xí)已經(jīng)成為了一個(gè)研究熱點(diǎn)。由基本的機(jī)器學(xué)習(xí)算法入手,,簡(jiǎn)析機(jī)器學(xué)習(xí)算法與TensorFlow框架,,并通過(guò)在Linux系統(tǒng)下搭建環(huán)境,仿真手寫(xiě)字符識(shí)別的TensorFlow模型,,實(shí)現(xiàn)手寫(xiě)字符的識(shí)別,,從而實(shí)現(xiàn)TensorFlow機(jī)器學(xué)習(xí)框架的學(xué)習(xí)與應(yīng)用

  關(guān)鍵詞:TensorFlow,;機(jī)器學(xué)習(xí),;應(yīng)用

  中圖分類(lèi)號(hào):TP181文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.10.017

  引用格式:章敏敏,徐和平,,王曉潔,,等.谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用[J].微型機(jī)與應(yīng)用,2017,36(10):58-60.

0引言

  機(jī)器學(xué)習(xí)是一門(mén)多領(lǐng)域交叉的學(xué)科,,能夠?qū)崿F(xiàn)計(jì)算機(jī)模擬或者實(shí)現(xiàn)人類(lèi)的學(xué)習(xí)行為,,重構(gòu)自己的知識(shí)結(jié)構(gòu)從而改善自身的性能。2016年初,,AlphaGo以大比分戰(zhàn)勝李世石,AI的概念從此進(jìn)入人們的視野,,而機(jī)器學(xué)習(xí)就是AI的核心,,是使計(jì)算機(jī)具有智能的根本途徑。TensorFlow是谷歌的第二代人工智能學(xué)習(xí)系統(tǒng),,是用來(lái)制作AlphaGo的一個(gè)開(kāi)源的深度學(xué)習(xí)系統(tǒng),。

1機(jī)器學(xué)習(xí)

  可以舉一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明機(jī)器學(xué)習(xí)的概念,使用k近鄰算法改進(jìn)交友網(wǎng)站的配對(duì)效果[1],。比如說(shuō)你現(xiàn)在想要在交友網(wǎng)站上認(rèn)識(shí)一個(gè)朋友,,而交友網(wǎng)站上擁有每個(gè)注冊(cè)用戶(hù)的兩個(gè)信息(玩視頻游戲所耗時(shí)間的百分比和每年獲取的飛行常客里程數(shù)),,你想知道你會(huì)對(duì)哪些人比較感興趣,,這時(shí)候就可以使用機(jī)器學(xué)習(xí)算法建立一個(gè)簡(jiǎn)單的模型??梢詫⒁恍┳约赫J(rèn)為有魅力的人,、魅力一般的人、不喜歡的人的這兩個(gè)信息(玩視頻游戲所耗時(shí)間的百分比和每年獲取的飛行??屠锍虜?shù))輸入機(jī)器學(xué)習(xí)算法建立一個(gè)模型,,如圖1所示。當(dāng)你想知道一個(gè)用戶(hù)是不是你感興趣交友的人時(shí),,輸入信息,,計(jì)算機(jī)通過(guò)這個(gè)模型進(jìn)行計(jì)算,,可以給你一個(gè)預(yù)測(cè)答案,這就是一種經(jīng)典的監(jiān)督學(xué)習(xí)算法,。

 

Image 001.jpg

  機(jī)器學(xué)習(xí)算法有很多種類(lèi),,上述例子說(shuō)明的監(jiān)督學(xué)習(xí)算法只是其中的一類(lèi)。如果換種方式去實(shí)現(xiàn)這個(gè)結(jié)果,,你有一堆如上的數(shù)據(jù),,但是并不對(duì)這些數(shù)據(jù)進(jìn)行分類(lèi),讓算法按照數(shù)據(jù)的分散方式來(lái)觀察這些數(shù)據(jù),,發(fā)現(xiàn)數(shù)據(jù)形成了一些聚類(lèi),,如圖2所示,而通過(guò)這種方法,,能夠把這些數(shù)據(jù)自動(dòng)地分類(lèi),,這就是一種無(wú)監(jiān)督學(xué)習(xí)算法。

 

Image 002.jpg

  機(jī)器學(xué)習(xí)的算法有很多,,再比如用學(xué)習(xí)型算法來(lái)判斷你需要多少訓(xùn)練信息,,用什么樣的更好的近似函數(shù)能夠反映數(shù)據(jù)之間的關(guān)系,使得用最少的訓(xùn)練信息獲得更準(zhǔn)確的判斷,。

  機(jī)器學(xué)習(xí)就是當(dāng)機(jī)器想要完成一個(gè)任務(wù),,通過(guò)它不斷地積累經(jīng)驗(yàn),來(lái)逐漸更好,、差錯(cuò)減少地完成一個(gè)任務(wù),。

2TensorFlow的框架

  2.1TensorFlow輸入張量

  TensorFlow的命名來(lái)源于本身的運(yùn)行原理。Tensor(張量)意味著N維數(shù)組,,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計(jì)算,。用MNIST機(jī)器學(xué)習(xí)[23]這個(gè)例子來(lái)解釋一個(gè)用于預(yù)測(cè)圖片里面的數(shù)字的模型。

  首先要先獲得一個(gè)MNIST數(shù)據(jù)集,,如圖3所示,,這個(gè)數(shù)據(jù)集能夠在TensorFlow官網(wǎng)上進(jìn)行下載。每一個(gè)MNIST數(shù)據(jù)單元由一張包含手寫(xiě)數(shù)字的圖片和一個(gè)對(duì)應(yīng)的標(biāo)簽兩部分組成,。把這些圖片設(shè)為“xs”,,把這些標(biāo)簽設(shè)為“ys”。MNIST數(shù)據(jù)集擁有60 000行的訓(xùn)練數(shù)據(jù)集(mnist.train)和10 000行的測(cè)試數(shù)據(jù)集(mnist.test),。

  

Image 003.jpg

Image 004.jpg

  每一張圖片包含28×28個(gè)像素點(diǎn),。可以用一個(gè)數(shù)字?jǐn)?shù)組來(lái)表示這張圖片:把這個(gè)數(shù)組展開(kāi)成一個(gè)向量,,長(zhǎng)度是784,。在MNIST訓(xùn)練數(shù)據(jù)集中,mnist.train.images(訓(xùn)練數(shù)集中的圖片)是一個(gè) [60 000, 784] 的張量,如圖4所示,,第一個(gè)維度數(shù)字用來(lái)對(duì)應(yīng)每張圖片,,第二個(gè)維度數(shù)字用來(lái)索引每張圖片中的像素點(diǎn)。在此張量里的每一個(gè)元素,,都表示為某張圖片里的某個(gè)像素的介于0和1之間的強(qiáng)度值,。

  相對(duì)應(yīng)的標(biāo)簽是從0到9的數(shù)字,用來(lái)描述給定圖片里表示的數(shù)字,。每個(gè)數(shù)字對(duì)應(yīng)著相應(yīng)位置1,,如標(biāo)簽0表示為[1,0,0,0,0,0,0,0,0,0],因此mnist.train.labels是一個(gè) [60 000, 10] 的數(shù)字矩陣,,如圖5所示,。

  

Image 005.jpg

  如上述的這兩個(gè)數(shù)組都是二維數(shù)組,都是TensorFlow中的張量數(shù)據(jù)[4],,而這些數(shù)據(jù)就以流的形式進(jìn)入數(shù)據(jù)運(yùn)算的各個(gè)節(jié)點(diǎn),。而以機(jī)器算法為核心所構(gòu)造的模型就是數(shù)據(jù)流動(dòng)的場(chǎng)所。TensorFlow就是一個(gè)是文件庫(kù),,研究人員和計(jì)算機(jī)科學(xué)家能夠借助這個(gè)文件庫(kù)打造分析圖像和語(yǔ)音等數(shù)據(jù)的系統(tǒng),,計(jì)算機(jī)在此類(lèi)系統(tǒng)的幫助下,將能夠自行作出決定,,從而變得更加智能,。

  2.2TensorFlow代碼框架

  TensorFlow是一個(gè)非常靈活的框架,它能夠運(yùn)行在個(gè)人計(jì)算機(jī)或者服務(wù)器的單個(gè)或多個(gè)CPU和GPU上,,甚至是移動(dòng)設(shè)備上,。

  可以從上面舉例的MNIST機(jī)器學(xué)習(xí)來(lái)分析TensorFlow的框架。首先,,要構(gòu)建一個(gè)計(jì)算的過(guò)程。MNIST所用到的算法核心就是softmax回歸算法,,這個(gè)算法就是通過(guò)對(duì)已知訓(xùn)練數(shù)據(jù)同個(gè)標(biāo)簽的像素加權(quán)平均,,來(lái)構(gòu)建出每個(gè)標(biāo)簽在不同像素點(diǎn)上的權(quán)值,若是這個(gè)像素點(diǎn)具有有利的證據(jù)說(shuō)明這張圖片不屬于這類(lèi),,那么相應(yīng)的權(quán)值為負(fù)數(shù),,相反若是這個(gè)像素?fù)碛杏欣淖C據(jù)支持這張圖片屬于這個(gè)類(lèi),那么權(quán)值是正數(shù),。

  因?yàn)檩斎胪鶗?huì)帶有一些無(wú)關(guān)的干擾量,,于是加入一個(gè)額外的偏置量(bias)。因此對(duì)于給定的輸入圖片x它代表的是數(shù)字i的證據(jù),,可以表示為:

  evidencei=∑jWi,jxj+bi(1)

  其中Wi,j表示權(quán)值的矩陣,,xj為給定圖片的像素點(diǎn),bi代表數(shù)字i類(lèi)的偏置量。

  在這里不給出詳細(xì)的推導(dǎo)過(guò)程,,但是可以得到一個(gè)計(jì)算出一個(gè)圖片對(duì)應(yīng)每個(gè)標(biāo)簽的概率大小的計(jì)算方式,,可以通過(guò)如下的代碼來(lái)得到一個(gè)概率分布:

  y=softmax(Wx+b)(2)

  建立好一個(gè)算法模型之后,算法內(nèi)輸入的所有可操作的交互單元就像式(2)中的圖片輸入x,,為了適應(yīng)所有的圖片輸入,,將其設(shè)置為變量占位符placeholder。而像權(quán)重W和偏置值b這兩個(gè)通過(guò)學(xué)習(xí)不斷修改值的單元設(shè)置為變量Variable,。

  train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

  TensorFlow在這一步就是在后臺(tái)給描述計(jì)算的那張圖里面增添一系列新的計(jì)算操作單元用來(lái)實(shí)現(xiàn)反向傳播算法和梯度下降算法,。它返回一個(gè)單一的操作,當(dāng)運(yùn)行這個(gè)操作時(shí),,可以用梯度下降算法來(lái)訓(xùn)練模型,,微調(diào)變量,不斷減少成本,,從而建立好一個(gè)基本模型,。

  建立好模型之后,創(chuàng)建一個(gè)會(huì)話(Session),,循環(huán)1 000次,,每次批處理100個(gè)數(shù)據(jù),開(kāi)始數(shù)據(jù)訓(xùn)練,,代碼如下:

  sess= tf.InteractiveSession()

  for i in range(1000):

  batch_xs,batch_ys=mnist.train.next_batch(100)

  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

  TensorFlow通過(guò)數(shù)據(jù)輸入(Feeds)將張量數(shù)據(jù)輸入至模型中,,而張量Tensor就像數(shù)據(jù)流一樣流過(guò)每個(gè)計(jì)算節(jié)點(diǎn),微調(diào)變量,,使得模型更加準(zhǔn)確,。

  通過(guò)這個(gè)例子,可以管中窺豹了解TensorFlow的框架結(jié)構(gòu),,TensorFlow對(duì)于輸入的計(jì)算過(guò)程在后臺(tái)描述成計(jì)算圖,,計(jì)算圖建立好之后,創(chuàng)建會(huì)話Session來(lái)提交計(jì)算圖,,用Feed輸入訓(xùn)練的張量數(shù)據(jù),,TensorFlow通過(guò)在后臺(tái)增加計(jì)算操作單元用于訓(xùn)練模型,微調(diào)數(shù)據(jù),,從而完成一個(gè)機(jī)器的學(xué)習(xí)任務(wù)[5],。

3TensorFlow的應(yīng)用

  TensorFlow的支持列表里沒(méi)有Windows,而人們使用的計(jì)算機(jī)大都是安裝的Windows系統(tǒng),雖然可以用Docker來(lái)實(shí)現(xiàn)在Windows上運(yùn)行,,但小問(wèn)題很多,,它支持得最好的還是基于UNIX內(nèi)核的系統(tǒng)[6],例如Linux,因此選擇Ubuntu 15.10,。

  安裝成功之后,,可以測(cè)試一下上述MNIST_sotfmax的模型。在程序中加入可以判斷其預(yù)測(cè)概率的代碼:

  correct_prediction=tf.equal(tf.argmax(y,1), tf.argmax(y_, 1))

  當(dāng)tf.argmax(y, 1)預(yù)測(cè)值與tf.argmax(y_, 1)正確值相等的時(shí)候判斷其為正確的預(yù)測(cè):

  accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

  accuracy用來(lái)計(jì)算預(yù)測(cè)與完全錯(cuò)誤判斷之間的距離,也就是正確率,,最后將它打印在顯示屏上,。

  在導(dǎo)入代碼之前,要先給予終端最高權(quán)限,,不然在導(dǎo)入代碼的時(shí)候會(huì)顯示權(quán)限限制,。成功導(dǎo)入代碼后,命令行打印出測(cè)試結(jié)果的正確率,,如圖6所示為0.919 1,。當(dāng)然

Image 006.jpg

  這只是最簡(jiǎn)單的一個(gè)模型,有許多算法模型的正確率可以達(dá)到0.997左右,。

4結(jié)論

  TensorFlow是一個(gè)很好的利用機(jī)器學(xué)習(xí)算法的框架,,而它的優(yōu)勢(shì)在于深度學(xué)習(xí)系統(tǒng)的構(gòu)建,雖然在本文中沒(méi)有涉及,,但是從實(shí)驗(yàn)仿真中可以看到TensorFlow的模型構(gòu)建簡(jiǎn)便,,訓(xùn)練速度快。

  參考文獻(xiàn)

 ?。?] HARRINGTON P.機(jī)器學(xué)習(xí)實(shí)戰(zhàn)[M].李銳,,李鵬,曲亞?wèn)|,,等,譯.北京:人民郵電出版社,,2013.

  [2] TensorFlow官方文檔中文版[EB/OL].(2015-11-18)[2016-11-25]http://wiki.jikexueyuan.com/project/tensorflowzh/.

 ?。?] TensorFlow官方網(wǎng)站[EB/OL].[2016-11-25]https://www.tensorflow.org/.

 ?。?] TensorFlow架構(gòu)[EB/OL].(2016-06-12)[2016-11-25]http://blog.csdn.net/stdcoutzyx/article/details/51645396.

  [5] Google TensorFlow機(jī)器學(xué)習(xí)框架介紹和使用[EB/OL].(2015-12-15)[2016-11-25]http://blog.csdn.net/sinat_31628525/article/details/50320817.

 ?。?] 張俊,,李鑫.TensorFlow平臺(tái)下的手寫(xiě)字符識(shí)別[J].電腦知識(shí)及技術(shù),2016,,12(16):199-201.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。