章敏敏,徐和平,王曉潔,周夢昀,洪淑月
(浙江師范大學(xué) 數(shù)理與信息工程學(xué)院,浙江 金華 321004)
谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用
章敏敏,徐和平,王曉潔,周夢昀,洪淑月
(浙江師范大學(xué) 數(shù)理與信息工程學(xué)院,浙江 金華 321004)
TensorFlow是谷歌的第二代開源的人工智能學(xué)習(xí)系統(tǒng),是用來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的內(nèi)置框架學(xué)習(xí)軟件庫。目前,TensorFlow機(jī)器學(xué)習(xí)已經(jīng)成為了一個(gè)研究熱點(diǎn)。由基本的機(jī)器學(xué)習(xí)算法入手,簡析機(jī)器學(xué)習(xí)算法與TensorFlow框架,并通過在Linux系統(tǒng)下搭建環(huán)境,仿真手寫字符識別的TensorFlow模型,實(shí)現(xiàn)手寫字符的識別,從而實(shí)現(xiàn)TensorFlow機(jī)器學(xué)習(xí)框架的學(xué)習(xí)與應(yīng)用。
TensorFlow;機(jī)器學(xué)習(xí);應(yīng)用
機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉的學(xué)科,能夠?qū)崿F(xiàn)計(jì)算機(jī)模擬或者實(shí)現(xiàn)人類的學(xué)習(xí)行為,重構(gòu)自己的知識結(jié)構(gòu)從而改善自身的性能。2016年初,AlphaGo以大比分戰(zhàn)勝李世石,AI的概念從此進(jìn)入人們的視野,而機(jī)器學(xué)習(xí)就是AI的核心,是使計(jì)算機(jī)具有智能的根本途徑。TensorFlow是谷歌的第二代人工智能學(xué)習(xí)系統(tǒng),是用來制作AlphaGo的一個(gè)開源的深度學(xué)習(xí)系統(tǒng)。
可以舉一個(gè)簡單的例子來說明機(jī)器學(xué)習(xí)的概念,使用k-近鄰算法改進(jìn)交友網(wǎng)站的配對效果[1]。比如說你現(xiàn)在想要在交友網(wǎng)站上認(rèn)識一個(gè)朋友,而交友網(wǎng)站上擁有每個(gè)注冊用戶的兩個(gè)信息(玩視頻游戲所耗時(shí)間的百分比和每年獲取的飛行??屠锍虜?shù)),你想知道你會對哪些人比較感興趣,這時(shí)候就可以使用機(jī)器學(xué)習(xí)算法建立一個(gè)簡單的模型??梢詫⒁恍┳约赫J(rèn)為有魅力的人、魅力一般的人、不喜歡的人的這兩個(gè)信息(玩視頻游戲所耗時(shí)間的百分比和每年獲取的飛行??屠锍虜?shù))輸入機(jī)器學(xué)習(xí)算法建立一個(gè)模型,如圖1所示。當(dāng)你想知道一個(gè)用戶是不是你感興趣交友的人時(shí),輸入信息,計(jì)算機(jī)通過這個(gè)模型進(jìn)行計(jì)算,可以給你一個(gè)預(yù)測答案,這就是一種經(jīng)典的監(jiān)督學(xué)習(xí)算法。
圖1 交友網(wǎng)站信息數(shù)據(jù)
機(jī)器學(xué)習(xí)算法有很多種類,上述例子說明的監(jiān)督學(xué)習(xí)算法只是其中的一類。如果換種方式去實(shí)現(xiàn)這個(gè)結(jié)果,你有一堆如上的數(shù)據(jù),但是并不對這些數(shù)據(jù)進(jìn)行分類,讓算法按照數(shù)據(jù)的分散方式來觀察這些數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)形成了一些聚類,如圖2所示,而通過這種方法,能夠把這些數(shù)據(jù)自動地分類,這就是一種無監(jiān)督學(xué)習(xí)算法。
圖2 信息數(shù)據(jù)聚類
機(jī)器學(xué)習(xí)的算法有很多,再比如用學(xué)習(xí)型算法來判斷你需要多少訓(xùn)練信息,用什么樣的更好的近似函數(shù)能夠反映數(shù)據(jù)之間的關(guān)系,使得用最少的訓(xùn)練信息獲得更準(zhǔn)確的判斷。
機(jī)器學(xué)習(xí)就是當(dāng)機(jī)器想要完成一個(gè)任務(wù),通過它不斷地積累經(jīng)驗(yàn),來逐漸更好、差錯(cuò)減少地完成一個(gè)任務(wù)。
2.1 TensorFlow輸入張量
TensorFlow的命名來源于本身的運(yùn)行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計(jì)算。用MNIST機(jī)器學(xué)習(xí)[2-3]這個(gè)例子來解釋一個(gè)用于預(yù)測圖片里面的數(shù)字的模型。
首先要先獲得一個(gè)MNIST數(shù)據(jù)集,如圖3所示,這個(gè)數(shù)據(jù)集能夠在TensorFlow官網(wǎng)上進(jìn)行下載。每一個(gè)MNIST數(shù)據(jù)單元由一張包含手寫數(shù)字的圖片和一個(gè)對應(yīng)的標(biāo)簽兩部分組成。把這些圖片設(shè)為“xs”,把這些標(biāo)簽設(shè)為“ys”。MNIST數(shù)據(jù)集擁有60 000行的訓(xùn)練數(shù)據(jù)集(mnist.train)和10 000行的測試數(shù)據(jù)集(mnist.test)。
圖3 數(shù)據(jù)集
圖4 image數(shù)組
每一張圖片包含28×28個(gè)像素點(diǎn)??梢杂靡粋€(gè)數(shù)字?jǐn)?shù)組來表示這張圖片:把這個(gè)數(shù)組展開成一個(gè)向量,長度是784。在MNIST訓(xùn)練數(shù)據(jù)集中,mnist.train.images(訓(xùn)練數(shù)集中的圖片)是一個(gè) [60 000,784] 的張量,如圖4所示,第一個(gè)維度數(shù)字用來對應(yīng)每張圖片,第二個(gè)維度數(shù)字用來索引每張圖片中的像素點(diǎn)。在此張量里的每一個(gè)元素,都表示為某張圖片里的某個(gè)像素的介于0和1之間的強(qiáng)度值。
相對應(yīng)的標(biāo)簽是從0到9的數(shù)字,用來描述給定圖片里表示的數(shù)字。每個(gè)數(shù)字對應(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所示。
圖5 標(biāo)簽數(shù)組
如上述的這兩個(gè)數(shù)組都是二維數(shù)組,都是TensorFlow中的張量數(shù)據(jù)[4],而這些數(shù)據(jù)就以流的形式進(jìn)入數(shù)據(jù)運(yùn)算的各個(gè)節(jié)點(diǎn)。而以機(jī)器算法為核心所構(gòu)造的模型就是數(shù)據(jù)流動的場所。TensorFlow就是一個(gè)是文件庫,研究人員和計(jì)算機(jī)科學(xué)家能夠借助這個(gè)文件庫打造分析圖像和語音等數(shù)據(jù)的系統(tǒng),計(jì)算機(jī)在此類系統(tǒng)的幫助下,將能夠自行作出決定,從而變得更加智能。
2.2 TensorFlow代碼框架
TensorFlow是一個(gè)非常靈活的框架,它能夠運(yùn)行在個(gè)人計(jì)算機(jī)或者服務(wù)器的單個(gè)或多個(gè)CPU和GPU上,甚至是移動設(shè)備上??梢詮纳厦媾e例的MNIST機(jī)器學(xué)習(xí)來分析TensorFlow的框架。首先,要構(gòu)建一個(gè)計(jì)算的過程。MNIST所用到的算法核心就是softmax回歸算法,這個(gè)算法就是通過對已知訓(xùn)練數(shù)據(jù)同個(gè)標(biāo)簽的像素加權(quán)平均,來構(gòu)建出每個(gè)標(biāo)簽在不同像素點(diǎn)上的權(quán)值,若是這個(gè)像素點(diǎn)具有有利的證據(jù)說明這張圖片不屬于這類,那么相應(yīng)的權(quán)值為負(fù)數(shù),相反若是這個(gè)像素?fù)碛杏欣淖C據(jù)支持這張圖片屬于這個(gè)類,那么權(quán)值是正數(shù)。
因?yàn)檩斎胪鶗в幸恍o關(guān)的干擾量,于是加入一個(gè)額外的偏置量(bias)。因此對于給定的輸入圖片x它代表的是數(shù)字i的證據(jù),可以表示為:
(1)
其中Wi,j表示權(quán)值的矩陣,xj為給定圖片的像素點(diǎn),bi代表數(shù)字i類的偏置量。
在這里不給出詳細(xì)的推導(dǎo)過程,但是可以得到一個(gè)計(jì)算出一個(gè)圖片對應(yīng)每個(gè)標(biāo)簽的概率大小的計(jì)算方式,可以通過如下的代碼來得到一個(gè)概率分布:
y=softmax(Wx+b)
(2)
建立好一個(gè)算法模型之后,算法內(nèi)輸入的所有可操作的交互單元就像式(2)中的圖片輸入x,為了適應(yīng)所有的圖片輸入,將其設(shè)置為變量占位符placeholder。而像權(quán)重W和偏置值b這兩個(gè)通過學(xué)習(xí)不斷修改值的單元設(shè)置為變量Variable。
train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
TensorFlow在這一步就是在后臺給描述計(jì)算的那張圖里面增添一系列新的計(jì)算操作單元用來實(shí)現(xiàn)反向傳播算法和梯度下降算法。它返回一個(gè)單一的操作,當(dāng)運(yùn)行這個(gè)操作時(shí),可以用梯度下降算法來訓(xùn)練模型,微調(diào)變量,不斷減少成本,從而建立好一個(gè)基本模型。
建立好模型之后,創(chuàng)建一個(gè)會話(Session),循環(huán)1 000次,每次批處理100個(gè)數(shù)據(jù),開始數(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通過數(shù)據(jù)輸入(Feeds)將張量數(shù)據(jù)輸入至模型中,而張量Tensor就像數(shù)據(jù)流一樣流過每個(gè)計(jì)算節(jié)點(diǎn),微調(diào)變量,使得模型更加準(zhǔn)確。
通過這個(gè)例子,可以管中窺豹了解TensorFlow的框架結(jié)構(gòu),TensorFlow對于輸入的計(jì)算過程在后臺描述成計(jì)算圖,計(jì)算圖建立好之后,創(chuàng)建會話Session來提交計(jì)算圖,用Feed輸入訓(xùn)練的張量數(shù)據(jù),TensorFlow通過在后臺增加計(jì)算操作單元用于訓(xùn)練模型,微調(diào)數(shù)據(jù),從而完成一個(gè)機(jī)器的學(xué)習(xí)任務(wù)[5]。
TensorFlow的支持列表里沒有Windows,而人們使用的計(jì)算機(jī)大都是安裝的Windows系統(tǒng),雖然可以用Docker來實(shí)現(xiàn)在Windows上運(yùn)行,但小問題很多,它支持得最好的還是基于UNIX內(nèi)核的系統(tǒng)[6],例如Linux,因此選擇Ubuntu 15.10。
安裝成功之后,可以測試一下上述MNIST_sotfmax的模型。在程序中加入可以判斷其預(yù)測概率的代碼:
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
當(dāng)tf.argmax(y,1)預(yù)測值與tf.argmax(y_,1)正確值相等的時(shí)候判斷其為正確的預(yù)測:
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
accuracy用來計(jì)算預(yù)測與完全錯(cuò)誤判斷之間的距離,也就是正確率,最后將它打印在顯示屏上。
在導(dǎo)入代碼之前,要先給予終端最高權(quán)限,不然在導(dǎo)入代碼的時(shí)候會顯示權(quán)限限制。成功導(dǎo)入代碼后,命令行打印出測試結(jié)果的正確率,如圖6所示為0.919 1。當(dāng)然這只是最簡單的一個(gè)模型,有許多算法模型的正確率可以達(dá)到0.997左右。
圖6 MNIST.softmax.py運(yùn)行結(jié)果
TensorFlow是一個(gè)很好的利用機(jī)器學(xué)習(xí)算法的框架,而它的優(yōu)勢在于深度學(xué)習(xí)系統(tǒng)的構(gòu)建,雖然在本文中沒有涉及,但是從實(shí)驗(yàn)仿真中可以看到TensorFlow的模型構(gòu)建簡便,訓(xùn)練速度快。
[1] HARRINGTON P.機(jī)器學(xué)習(xí)實(shí)戰(zhàn)[M].李銳,李鵬,曲亞東,等,譯.北京:人民郵電出版社,2013.
[2] TensorFlow官方文檔中文版[EB/OL].(2015-11-18)[2016-11-25]http://wiki.jikexueyuan.com/project/tensorflow-zh/.
[3] TensorFlow官方網(wǎng)站[EB/OL].[2016-11-25]https://www.tensorflow.org/.
[4] 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.
[6] 張俊,李鑫.TensorFlow平臺下的手寫字符識別[J].電腦知識及技術(shù),2016,12(16):199-201.
Application of Google TensorFlow machine learning framework
Zhang Minmin,Xu Heping,Wang Xiaojie,Zhou Mengyun,Hong Shuyue
(College of Mathematics,Physics and Information Engineering,Zhejiang Normal University,Jinhua 321004,China)
TensorFlow is the second generation of Google’s open source artificial intelligence learning system,which is used to achieve the neural network built-in framework for learning software library.At present,TensorFlow machine learning has become a hot research topic.Starting from the basic algorithm of machine learning,this paper analyzes machine learning algorithm and TensorFlow framework,and through building environment in the Linux system,simulates TensorFlow model of handwritten character recognition,to achieve handwritten character recognition,so as to realize the TensorFlow machine learning and application framework.
TensorFlow; machine learning; application
TP181
A
10.19358/j.issn.1674- 7720.2017.10.017
章敏敏,徐和平,王曉潔,等.谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用[J].微型機(jī)與應(yīng)用,2017,36(10):58-60.
2016-11-25)
章敏敏(1996-),女,本科,主要研究方向:機(jī)器學(xué)習(xí)理論及應(yīng)用。
徐和平(1995-),男,本科,主要研究方向:機(jī)器學(xué)習(xí)理論及應(yīng)用。
王曉潔(1996-),女,本科,主要研究方向:機(jī)器學(xué)習(xí)理論及應(yīng)用。