張俊+李鑫
摘要:基于谷歌第二代人工智能學(xué)習(xí)系統(tǒng)TensorFlow,構(gòu)建BP神經(jīng)網(wǎng)絡(luò)模型。將手寫字符作為訓(xùn)練集輸入神經(jīng)網(wǎng)絡(luò),訓(xùn)練過(guò)程中不斷調(diào)整權(quán)值和閾值,最終得到有較高識(shí)別精度的模型。體現(xiàn)了TensorFlow在提高建模、編程、分析效率中的作用。通過(guò)此開(kāi)發(fā)流程介紹,為進(jìn)一步使用TensorFlow構(gòu)建復(fù)雜神經(jīng)網(wǎng)絡(luò)提供了參考。
關(guān)鍵詞:人工智能;TensorFlow;BP神經(jīng)網(wǎng)絡(luò)
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)16-0199-03
Abstract:Based on Google's second generation of artificial intelligence learning system—TensorFlow, build a BP neural network model. Use handwritten characters as training set of inputs of neural network, constantly revise weight value and threshold value in the process of training, and get a higher identification precision of the model. It Embodies the TensorFlows effect in improving the efficiency of modeling, programming and analysis. Through introducing the development process, It provides reference which use TensorFlow building complex neural networks.
Key words:artificial intelligence; TensorFlow; BP neural networks
1 概述
目前,手寫字符的識(shí)別方法已經(jīng)有多種,如支持向量機(jī)、BP神經(jīng)網(wǎng)絡(luò)、KNN、樸素貝葉斯方法等。其中BP神經(jīng)網(wǎng)絡(luò)作為一種經(jīng)典的模式識(shí)別工具,應(yīng)用廣泛。將BP神經(jīng)網(wǎng)絡(luò)應(yīng)用于手寫字符識(shí)別,具有識(shí)別速度快、分類能力強(qiáng)、有較好的容錯(cuò)性能和學(xué)習(xí)能力的優(yōu)點(diǎn)。
TensorFlow是一個(gè)采用數(shù)據(jù)流圖,用于數(shù)值計(jì)算的開(kāi)源軟件庫(kù)。它通過(guò)構(gòu)建有向圖來(lái)描述所要執(zhí)行的操作,可以靈活的使用設(shè)備中的CPU或者GPU展開(kāi)計(jì)算。TensorFlow提供了構(gòu)建神經(jīng)網(wǎng)絡(luò)的接口,因此便于構(gòu)建BP神經(jīng)網(wǎng)絡(luò),簡(jiǎn)化編程任務(wù)。與傳統(tǒng)平臺(tái)構(gòu)建的識(shí)別模型相比,提高了效率。
2 TensorFlow深度學(xué)習(xí)平臺(tái)
2.1 TensorFlow平臺(tái)特性
TensorFlow使用靈活,無(wú)論是個(gè)人PC還是大規(guī)模GPU計(jì)算集群,TensorFlow都能夠靈活的在這些平臺(tái)運(yùn)行,使用 TensorFlow 表示的計(jì)算也可以在這些平臺(tái)上方便地移植。目前,TensorFlow已經(jīng)被應(yīng)用于機(jī)器學(xué)習(xí)系統(tǒng),以及和計(jì)算機(jī)科學(xué)相關(guān)的領(lǐng)域,例如計(jì)算機(jī)視覺(jué)、語(yǔ)言識(shí)別、信息檢索、機(jī)器人、地理信息抽取、自然語(yǔ)言理解和計(jì)算藥物發(fā)現(xiàn)等。TensorFlow靈活的特性也可以用來(lái)表示很多的算法,比如推斷算法和深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練等。
TensorFlow采用數(shù)據(jù)流計(jì)算,其表達(dá)的數(shù)據(jù)流計(jì)算由一個(gè)有向圖表示,這個(gè)圖由一個(gè)節(jié)點(diǎn)集合組成。在一幅 TensorFlow 圖中,每個(gè)節(jié)點(diǎn)有一個(gè)或者多個(gè)輸入和零個(gè)或者多個(gè)輸出,表示一種操作的實(shí)例化。圖中的葉子節(jié)點(diǎn)通常為常量或者變量,非葉子結(jié)點(diǎn)為一種操作,箭頭代表的是張量(常量、變量以及節(jié)點(diǎn)計(jì)算出的結(jié)果均可視為張量)的流動(dòng)方向。
通過(guò)在Ubuntu系統(tǒng)上安裝TensorFlow庫(kù)、啟用GPU支持即可使用Python語(yǔ)言構(gòu)建計(jì)算圖,實(shí)現(xiàn)基于神經(jīng)網(wǎng)絡(luò)的手寫字符識(shí)別。
2.2 TensorFlow平臺(tái)搭建
TensorFlow目前支持Ubuntu系統(tǒng)和MAC OS系統(tǒng)中安裝,支持C++和Python兩種編程語(yǔ)言。考慮到Python語(yǔ)言的簡(jiǎn)潔性,本實(shí)驗(yàn)采用Python進(jìn)行程序設(shè)計(jì)。
1)使用 Virtualenv 創(chuàng)建隔離容器安裝 TensorFlow,不會(huì)改變不同Python項(xiàng)目的依賴關(guān)系,便于進(jìn)行項(xiàng)目的管理,能使排查安裝問(wèn)題變得更容易。
$ sudo apt-get install python-pip python-dev python-virtualenv
2)在Virtualenv環(huán)境下安裝TensorFlow的GPU版本:
創(chuàng)建圖:TensorFlow使用圖來(lái)表示計(jì)算任務(wù),在執(zhí)行計(jì)算操作之前需要將圖構(gòu)建完成。每一個(gè)非葉子節(jié)點(diǎn)都視為一種操作,葉子節(jié)點(diǎn)則表示特殊的操作類型,比如返回常量值或者變量值。創(chuàng)建圖的最后階段需要向圖中添加一個(gè)初始化操作的節(jié)點(diǎn),其作用是將所有的變量進(jìn)行初始化。
啟動(dòng)圖:圖創(chuàng)建完成后,才能啟動(dòng)圖。啟動(dòng)圖的第一步是創(chuàng)建一個(gè) Session 對(duì)象,如果無(wú)任何創(chuàng)建參數(shù),會(huì)話構(gòu)造器將啟動(dòng)默認(rèn)圖。然后進(jìn)行變量的初始化操作、運(yùn)行操作節(jié)點(diǎn)、更新變量值。
3 BP神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)
BP神經(jīng)網(wǎng)絡(luò)是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。學(xué)習(xí)規(guī)則使用最速下降法,通過(guò)反向傳播來(lái)不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,使網(wǎng)絡(luò)的誤差平方和最小。由輸入層、隱含層和輸出層組成,層與層之間采用全連接方式,同層之間不存在相互連接。
3.1 BP神經(jīng)網(wǎng)絡(luò)
3.2 TensorFlow平臺(tái)實(shí)現(xiàn)
本實(shí)驗(yàn)采用MNIST手寫字符數(shù)據(jù)集,手寫字符為28×28像素的手寫數(shù)字灰度圖像。存儲(chǔ)在train-images-idx3-ubyte.gz和train-labels-idx1-ubyte.gz 文件中的60000幅手寫字符數(shù)據(jù),55000幅作為訓(xùn)練集,5000幅作為驗(yàn)證集。測(cè)試集10000幅圖像的字符和標(biāo)簽存儲(chǔ)在t10k-images-idx3-ubyte.gz和t10k-labels-idx1-ubyte.gz中。
輸入層設(shè)計(jì):手寫字符每一張圖片的大小為32×32,一維化后,每一張圖片作為輸入時(shí)需要784個(gè)輸入層神經(jīng)元節(jié)點(diǎn),其中None表示輸入圖片的數(shù)目:
4 總結(jié)
目前,神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用于學(xué)術(shù)界和工業(yè)界,但在構(gòu)建神經(jīng)網(wǎng)絡(luò)、優(yōu)化參數(shù)、模型分析方面總是存在著一定的困難。TensorFlow的出現(xiàn)使這種狀況得以改善。TensorFlow有著編程簡(jiǎn)單、優(yōu)化算法集成度高、使用靈活的特性,利用TensorFlow將會(huì)使建模、編程、分析效率大大提高。實(shí)驗(yàn)以BP神經(jīng)網(wǎng)絡(luò)為例,介紹了TensorFlow平臺(tái)下神經(jīng)網(wǎng)絡(luò)模型構(gòu)建的一般方法和流程,并且得到了有較高識(shí)別精度的模型。對(duì)構(gòu)建更復(fù)雜的神經(jīng)網(wǎng)絡(luò)具有一定的參考意義。
參考文獻(xiàn):
[1] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-scale machine learning on heterogeneous systems, 2015[J]. Software available from tensorflow. org.
[2] 任翠池,楊淑瑩,洪俊.基于BP神經(jīng)網(wǎng)絡(luò)的手寫字符識(shí)別[J].天津理工大學(xué)學(xué)報(bào),2006,22(4):80-82.
[3] 張斌,趙瑋燁,李積憲.基于BP神經(jīng)網(wǎng)絡(luò)的手寫字符識(shí)別系統(tǒng)[J].蘭州交通大學(xué)學(xué)報(bào):自然科學(xué)版, 2007,26(1).
[4] 許宜申,顧濟(jì)華,陶智,等.基于改進(jìn) BP 神經(jīng)網(wǎng)絡(luò)的手寫字符識(shí)別[J].通信技術(shù),2011, 44(5): 106-109.
[5] 楊勇,謝剛生.基于BP神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識(shí)別[J].華東地質(zhì)學(xué)院學(xué)報(bào),2003,26(4): 383-386.
[6] 金連文,徐秉錚.基于多級(jí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的手寫體漢字識(shí)別[J].通信學(xué)報(bào),1997,18(5).
[7] 李平,蔣振剛.神經(jīng)網(wǎng)絡(luò)對(duì)手寫字符識(shí)別特征的提取[J]. 長(zhǎng)春光學(xué)精密機(jī)械學(xué)院學(xué)報(bào),2000,23(2): 22-24.
[8] 朱大奇,史慧.人工神經(jīng)網(wǎng)絡(luò)原理及應(yīng)用[M].北京:科學(xué)出版社,2006.