溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中

發(fā)布時(shí)間:2021-11-15 16:23:58 來源:億速云 閱讀:156 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

什么是深度學(xué)習(xí)? 

深度學(xué)習(xí)這個(gè)名詞聽了很多次,它到底是什么東西,它背后的技術(shù)其實(shí)起源于神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)最早受到人類大腦工作原理的啟發(fā),我們知道人的大腦是很復(fù)雜的結(jié)構(gòu),它可以被分為很多區(qū)域,比如聽覺中心、視覺中心,我在讀研究中心的時(shí)候,做視頻有計(jì)算機(jī)視覺研究室,做語言有語言所,語音有語音所,不同的功能在學(xué)科劃分中已經(jīng)分開了,這個(gè)和我們?nèi)祟悓Υ竽X理解多多少少有一些關(guān)系。之后科學(xué)家發(fā)現(xiàn)人類大腦是一個(gè)通用的計(jì)算模型。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中

科學(xué)家做了這樣一個(gè)實(shí)驗(yàn),把小白鼠的聽覺中心的神經(jīng)和耳朵通路剪斷,視覺輸入接到聽覺中心上,過了幾個(gè)月,小白鼠可以通過聽覺中心處理視覺信號。這就說明人類大腦工作原理是一樣的,神經(jīng)元工作原理一樣,只是需要經(jīng)過不斷的訓(xùn)練?;谶@樣的假設(shè),神經(jīng)學(xué)家做了這樣的嘗試,希望給盲人能夠帶來重新看到世界的希望,他們相當(dāng)于是把電極接到舌頭上,通過攝像機(jī)把不同的像素傳到舌頭上,使得盲人有可能通過舌頭看到世界。對人類神經(jīng)工作原理的進(jìn)一步理解讓我們看到深度學(xué)習(xí)有望成為一種通用的學(xué)習(xí)模型。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中


上圖給出了神經(jīng)網(wǎng)絡(luò)的大致結(jié)構(gòu)。圖中左側(cè)是人類的神經(jīng)元,右側(cè)是神經(jīng)網(wǎng)絡(luò)的神經(jīng)元。神經(jīng)網(wǎng)絡(luò)的神經(jīng)元最早受到了人類神經(jīng)元結(jié)構(gòu)的啟發(fā),并試圖模型人類神經(jīng)元的工作方式。具體的技術(shù)這里不做過深的討論。上圖中下側(cè)給出的是人類神經(jīng)網(wǎng)絡(luò)和人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network)的對比,在計(jì)算機(jī)神經(jīng)網(wǎng)絡(luò)中,我們需要明確的定義輸入層、輸出層。合理的利用人工神經(jīng)網(wǎng)絡(luò)的輸入輸出就可以幫助我們解決實(shí)際的問題。

神經(jīng)網(wǎng)絡(luò)最核心的工作原理,是要通過給定的輸入信號轉(zhuǎn)化為輸出信號,使得輸出信號能夠解決需要解決的問題。比如在完成文本分類問題時(shí),我們需要將文章分為體育或者藝術(shù)。那么我們可以將文章中的單詞作為輸入提供給神經(jīng)網(wǎng)絡(luò),而輸出的節(jié)點(diǎn)就代表不同的種類。文章應(yīng)該屬于哪一個(gè)種類,那么我們希望對應(yīng)的輸出節(jié)點(diǎn)的輸出值為1,其他的輸出值為0。通過合理的設(shè)置神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和訓(xùn)練神經(jīng)網(wǎng)絡(luò)中的參數(shù),訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型就可以幫助我們判斷一篇文章應(yīng)該屬于哪一個(gè)種類了。

深度學(xué)習(xí)在圖像識別中的應(yīng)用 

深度學(xué)習(xí),它最初的應(yīng)用,在于圖像識別。最經(jīng)典的應(yīng)用就是Imagenet的數(shù)據(jù)集。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中
ImageNet是一個(gè)非常大的數(shù)據(jù)集,它里面有1500萬張圖片。下圖展示了數(shù)據(jù)集中一張樣例圖片。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中


在深度學(xué)習(xí)算法被應(yīng)用之前,傳統(tǒng)的機(jī)器學(xué)習(xí)方法對圖像處理的能力有限。在2012年之前,最好的機(jī)器學(xué)習(xí)算法能夠達(dá)到的錯(cuò)誤率為25%,而且已經(jīng)很難再有新的突破了。在2012年時(shí),深度學(xué)習(xí)首次被應(yīng)用在在ImageNet數(shù)據(jù)集上,直接將錯(cuò)誤率降低到了16%。在隨后的幾年中,隨著深度學(xué)習(xí)算法的改進(jìn),錯(cuò)誤率一直降低到2016年的3.5%。在ImageNet數(shù)據(jù)集上,人類分類的錯(cuò)誤率大概為5.1%。我們可以看到,機(jī)器的錯(cuò)誤率比人的錯(cuò)誤率更低,這是深度學(xué)習(xí)帶來的技術(shù)突破。

什么是TensorFlow 

TensorFlow是谷歌在去年11月份開源出來的深度學(xué)習(xí)框架。開篇我們提到過AlphaGo,它的開發(fā)團(tuán)隊(duì)DeepMind已經(jīng)宣布之后的所有系統(tǒng)都將基于TensorFlow來實(shí)現(xiàn)。TensorFlow一款非常強(qiáng)大的開源深度學(xué)習(xí)開源工具。它可以支持手機(jī)端、CPU、GPU以及分布式集群。TensorFlow在學(xué)術(shù)界和工業(yè)界的應(yīng)用都非常廣泛。在工業(yè)界,基于TensorFlow開發(fā)的谷歌翻譯、谷歌RankBrain等系統(tǒng)都已經(jīng)上線。在學(xué)術(shù)界很多我在CMU、北大的同學(xué)都表示TensorFlow是他們實(shí)現(xiàn)深度學(xué)習(xí)算法的首選工具。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中


上面的ppt給出了一個(gè)簡單的TensorFlow程序樣例,這個(gè)樣例實(shí)現(xiàn)了向量加法的功能。TensorFlow提供了Python和C++的API,但Python的API更全面,所以大部分TensorFlow程序都是通過Python實(shí)現(xiàn)的。在上面程序的第一行我們通過import將TensorFlow加載進(jìn)來。在TensorFlow中所有的數(shù)據(jù)都是通過張量(Tensor)的方式存儲,要計(jì)算張量中數(shù)據(jù)的具體取值,我們需要通過一個(gè)會話(session)。

上面代碼中的第二行展示了如何生成會話。會話管理運(yùn)行一個(gè)TensorFlow程序所需要的計(jì)算資源。TensorFlow中一個(gè)比較特殊的張量是變量(tf.Variable),在使用變量之前,我們需要明確調(diào)用變量初始化的過程。在上面的代碼最后一行,我們可以看到要得到結(jié)果張量output的取值,我們需要明確調(diào)用計(jì)算張量取值的過程。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中


通過TensorFlow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)是非常簡單的。通過TFLearn或者TensorFlow-Slim可以在10行之內(nèi)實(shí)現(xiàn)MNIST手寫體數(shù)字識別問題。上面的ppt展示了TensorFlow對于不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的支持,可以看出,TensorFlow可以在很短的代碼內(nèi)支持各種主要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

雖然TensorFlow可以很快的實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的功能,不過單機(jī)版的TensorFlow卻很難訓(xùn)練大規(guī)模的深層神經(jīng)網(wǎng)絡(luò)。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中


這張圖給出了谷歌在2015年提出的Inception-v3模型。這個(gè)模型在ImageNet數(shù)據(jù)集上可以達(dá)到95%的正確率。然而,這個(gè)模型中有2500萬個(gè)參數(shù),分類一張圖片需要50億次加法或者乘法運(yùn)算。即使只是使用這樣大規(guī)模的神經(jīng)網(wǎng)絡(luò)已經(jīng)需要非常大的計(jì)算量了,如果需要訓(xùn)練深層神經(jīng)網(wǎng)絡(luò),那么需要更大的計(jì)算量。神經(jīng)網(wǎng)絡(luò)的優(yōu)化比較復(fù)雜,沒有直接的數(shù)學(xué)方法求解,需要反復(fù)迭代。在單機(jī)上要把Inception-v3模型訓(xùn)練到78%的準(zhǔn)確率大概需要5個(gè)多月的時(shí)間。如果要訓(xùn)練到95%的正確率需要數(shù)年。這對于實(shí)際的生產(chǎn)環(huán)境是完全無法忍受的。

TensorFlow on Kubernetes 

如我們上面所介紹的,在單機(jī)環(huán)境下是無法訓(xùn)練大型的神經(jīng)網(wǎng)絡(luò)的。在谷歌的內(nèi)部,Google Brain以及TensorFlow都跑在谷歌內(nèi)部的集群管理系統(tǒng)Borg上。我在谷歌電商時(shí),我們使用的商品分類算法就跑在1千多臺服務(wù)器上。在谷歌外,我們可以將TensorFlow跑在Kubernetes上。在介紹如何將TensorFlow跑在Kubernetes上之前,我們先來介紹一下如何并行化的訓(xùn)練深度學(xué)習(xí)的模型。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中

深度學(xué)習(xí)模型常用的有兩種分布式訓(xùn)練方式。一種是同步更新,另一種是異步更新。如上面的ppt所示,在同步更新模式下,所有服務(wù)器都會統(tǒng)一讀取參數(shù)的取值,計(jì)算參數(shù)梯度,最后再統(tǒng)一更新。而在異步更新模式下,不同服務(wù)器會自己讀取參數(shù),計(jì)算梯度并更新參數(shù),而不需要與其他服務(wù)器同步。同步更新的最大問題在于,不同服務(wù)器需要同步完成所有操作,于是快的服務(wù)器需要等待慢的服務(wù)器,資源利用率會相對低一些。而異步模式可能會使用陳舊的梯度更新參數(shù)導(dǎo)致訓(xùn)練的效果受到影響。不同的更新模式各有優(yōu)缺點(diǎn),很難統(tǒng)一的說哪一個(gè)更好,需要具體問題具體分析。

無論使用哪種更新方式,使用分布式TensorFlow訓(xùn)練深度學(xué)習(xí)模型需要有兩種類型的服務(wù)器,一種是參數(shù)服務(wù)器,一種是計(jì)算服務(wù)器。參數(shù)服務(wù)器管理并保存神經(jīng)網(wǎng)絡(luò)參數(shù)的取值;計(jì)算服務(wù)器負(fù)責(zé)計(jì)算參數(shù)的梯度。

在TensorFlow中啟動分布式深度學(xué)習(xí)模型訓(xùn)練任務(wù)也有兩種模式。一種為In-graph replication。在這種模式下神經(jīng)網(wǎng)絡(luò)的參數(shù)會都保存在同一個(gè)TensorFlow計(jì)算圖中,只有計(jì)算會分配到不同計(jì)算服務(wù)器。另一種為Between-graph replication,這種模式下所有的計(jì)算服務(wù)器也會創(chuàng)建參數(shù),但參數(shù)會通過統(tǒng)一的方式分配到參數(shù)服務(wù)器。因?yàn)镮n-graph replication處理海量數(shù)據(jù)的能力稍弱,所以Between-graph replication是一個(gè)更加常用的模式。

如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中
最后一個(gè)問題,我們剛剛提到TensorFlow是支持以分布式集群的方式運(yùn)行的,那么為什么還需要Kubernetes?如果我們將TensorFlow和Hadoop系統(tǒng)做一個(gè)簡單的類比就可以很清楚的解釋這個(gè)問題。大家都知道Hadoop系統(tǒng)主要可以分為Yarn、HDFS和mapreduce計(jì)算框架,那么TensorFlow就相當(dāng)于只是Hadoop系統(tǒng)中Mapreduce計(jì)算框架的部分。

TensorFlow沒有類似Yarn的調(diào)度系統(tǒng),也沒有類似HDFS的存儲系統(tǒng)。這就是Kubernetes需要解決的部分。Kubernetes可以提供任務(wù)調(diào)度、監(jiān)控、失敗重啟等功能。沒有這些功能,我們很難手工的去每一臺機(jī)器上啟動TensorFlow服務(wù)器并時(shí)時(shí)監(jiān)控任務(wù)運(yùn)行的狀態(tài)。除此之外,分布式TensorFlow目前不支持生命周期管理,結(jié)束的訓(xùn)練進(jìn)程并不會自動關(guān)閉,這也需要進(jìn)行額外的處理。

上述內(nèi)容就是如何通過TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法并運(yùn)用到企業(yè)實(shí)踐中,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI