本篇文章為大家展示了怎么深度學(xué)習(xí)Spark和TensorFlow,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、鼓樓網(wǎng)站維護(hù)、網(wǎng)站推廣。
在過去幾年中,神經(jīng)網(wǎng)絡(luò)領(lǐng)域的發(fā)展非常迅猛,也是現(xiàn)在圖像識(shí)別和自動(dòng)翻譯領(lǐng)域中最強(qiáng)者。TensorFlow 是谷歌發(fā)布的數(shù)值計(jì)算和神經(jīng)網(wǎng)絡(luò)的新框架。本文中,我們將演示如何使用TensorFlow和Spark一起訓(xùn)練和應(yīng)用深度學(xué)習(xí)模型。
你可能會(huì)困惑:在最高性能深度學(xué)習(xí)實(shí)現(xiàn)還是單節(jié)點(diǎn)的當(dāng)下, Spark 的用處在哪里?為了回答這個(gè)問題,我們將會(huì)演示兩個(gè)例子并解釋如何使用 Spark 和機(jī)器集群搭配 TensorFlow 來提高深度學(xué)習(xí)的管道數(shù)。
深度機(jī)器學(xué)習(xí)(ML)技術(shù)的一個(gè)典型應(yīng)用是人工神經(jīng)網(wǎng)絡(luò)。它們采取一個(gè)復(fù)雜的輸入,如圖像或音頻記錄,然后對(duì)這些信號(hào)應(yīng)用復(fù)雜的數(shù)學(xué)變換。此變換的輸出是更易于由其他ML算法處理的數(shù)字向量。人工神經(jīng)網(wǎng)絡(luò)通過模仿人類大腦的視覺皮層的神經(jīng)元(以相當(dāng)簡(jiǎn)化的形式)執(zhí)行該轉(zhuǎn)換。
就像人類學(xué)會(huì)解讀他們所看到的,人工神經(jīng)網(wǎng)絡(luò)需要通過訓(xùn)練來識(shí)別那些“有趣”的具體模式。可以是簡(jiǎn)單的模式,比如邊緣,圓形,但也可以是更復(fù)雜的模式。在這里,我們將用NIST提供的經(jīng)典數(shù)據(jù)集來訓(xùn)練神經(jīng)網(wǎng)絡(luò)以識(shí)別這些數(shù)字:

TensorFlow 庫(kù)將會(huì)自動(dòng)創(chuàng)建各種形狀和大小的神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法。建立一個(gè)神經(jīng)網(wǎng)絡(luò)的實(shí)際過程,比單純?cè)跀?shù)據(jù)集上跑一些算法要復(fù)雜得多。通常會(huì)有一些非常重要的超參數(shù)(通俗地說,參數(shù)配置)需要設(shè)置,這將影響該模型是如何訓(xùn)練的。選擇正確的參數(shù)可以讓性能優(yōu)越,而壞的參數(shù)將會(huì)導(dǎo)致長(zhǎng)時(shí)間的訓(xùn)練和糟糕的表現(xiàn)。在實(shí)踐中,機(jī)器學(xué)習(xí)從業(yè)者會(huì)多次使用不同的超參數(shù)重復(fù)運(yùn)行相同的模型,以期找到最佳的集合。這是一個(gè)被稱為超參數(shù)調(diào)整的經(jīng)典技術(shù)。
建立一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí),有許多需要精心挑選的重要超參數(shù)。 例如:
每層的神經(jīng)元數(shù)目:太少的神經(jīng)元會(huì)降低網(wǎng)絡(luò)的表達(dá)能力,但太多會(huì)大大增加運(yùn)行時(shí)間,并返回模糊噪音。
學(xué)習(xí)速度:如果過高,神經(jīng)網(wǎng)絡(luò)將只專注于看到過去的幾個(gè)樣例,并忽略之前積累的經(jīng)驗(yàn)。如果太低,則需要很長(zhǎng)時(shí)間才能達(dá)到一個(gè)很好的狀態(tài)。
這里有趣的是,即使 TensorFlow 本身不予分發(fā),超參數(shù)調(diào)整過程是“易并行”(embarrassingly parallel),并且可以使用 Spark 來分配的。在這種情況下,我們可以使用 Spark 廣播通用的元素,例如數(shù)據(jù)和模型描述,然后以允許錯(cuò)誤的方式安排機(jī)器集群中的個(gè)體進(jìn)行獨(dú)立的重復(fù)性計(jì)算。

如何使用 Spark 提高精度?用默認(rèn)的超參數(shù)設(shè)置精度為99.2%。我們?cè)跍y(cè)試集上的最好結(jié)果是99.47%的精確度,這減少了34%的測(cè)試誤差。分布式計(jì)算時(shí)間與添加到集群的節(jié)點(diǎn)數(shù)量成線性關(guān)系:使用有13個(gè)節(jié)點(diǎn)的集群,我們能夠并行培養(yǎng)13個(gè)模型,這相比于在同一臺(tái)機(jī)器一個(gè)接著一個(gè)訓(xùn)練速度提升了7倍。這里是相對(duì)于該集群上機(jī)器的數(shù)量的計(jì)算時(shí)間(以秒計(jì))的曲線圖:

最重要的是,我們分析了大量訓(xùn)練過程中的超參數(shù)的靈敏度。例如,我們相對(duì)于不同數(shù)目的神經(jīng)元所得學(xué)習(xí)率繪制了最終測(cè)試性能圖:

這顯示了一個(gè)典型的神經(jīng)網(wǎng)絡(luò)權(quán)衡曲線:
學(xué)習(xí)速度是非常關(guān)鍵的:如果它太低,神經(jīng)網(wǎng)絡(luò)沒有學(xué)到任何東西(高測(cè)試誤差)。如果它太高,訓(xùn)練過程可能發(fā)生隨機(jī)振蕩甚至在某些配置下出現(xiàn)發(fā)散。
神經(jīng)元的數(shù)目對(duì)于獲得良好的性能來說沒有那么重要,并且有更多神經(jīng)元的網(wǎng)絡(luò)的學(xué)習(xí)率更加敏感。這是奧卡姆剃刀原則:對(duì)大多數(shù)目標(biāo)來說,簡(jiǎn)單的模型往往已經(jīng)“足夠好”。除非你在訓(xùn)練中投入大量的時(shí)間和資源,并找到合適的超參數(shù)來除去這缺少的1%測(cè)試誤差,這才會(huì)有所不同。
通過使用參數(shù)稀疏樣本,我們可以在最優(yōu)的參數(shù)集下取得零失誤率。
盡管 TensorFlow 可以使用每一個(gè) worker 上的所有核心,但每個(gè)工人同一時(shí)間只能運(yùn)行一個(gè)任務(wù),我們可以將它們打包以限制競(jìng)爭(zhēng)。TensorFlow 庫(kù)可以按照[instructions on the TensorFlow website](https://www.tensorflow.org/get_started/os_setup.html)上的指示在 Spark 集群上作為一個(gè)普通的Python庫(kù)進(jìn)行安裝。下面的筆記展示了用戶如何安裝 TensorFlow 庫(kù)并重復(fù)該文章的實(shí)驗(yàn):
使用 TensorFlow 進(jìn)行圖像分布式處理
使用 TensorFlow 進(jìn)行圖像分布式處理測(cè)試
TensorFlow 模型可以直接在管道內(nèi)嵌入對(duì)數(shù)據(jù)集執(zhí)行的復(fù)雜識(shí)別任務(wù)。作為一個(gè)例子,我們將展示我們?nèi)绾文軌蚴褂靡粋€(gè)已經(jīng)訓(xùn)練完成的股票神經(jīng)網(wǎng)絡(luò)模型標(biāo)注一組圖片
首先使用 Spark 內(nèi)置的廣播機(jī)制將該模型分發(fā)到集群中的worker上:
with gfile.FastGFile( 'classify_image_graph_def.pb', 'rb') as f: model_data = f.read() model_data_bc = sc.broadcast(model_data)
之后,這個(gè)模型被加載到每個(gè)節(jié)點(diǎn)上,并且應(yīng)用于圖片。這是每個(gè)節(jié)點(diǎn)運(yùn)行的代碼框架:
def apply_batch(image_url):
# Creates a new TensorFlow graph of computation and imports the model
with tf.Graph().as_default() as g:
graph_def = tf.GraphDef()
graph_def.ParseFromString(model_data_bc.value)
tf.import_graph_def(graph_def, name='')
# Loads the image data from the URL:
image_data = urllib.request.urlopen(img_url, timeout=1.0).read()
# Runs a tensor flow session that loads the
with tf.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('softmax:0')
predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data}) return predictions通過將圖片打包在一起,這份代碼可以運(yùn)行地更快。
下面是圖片的一個(gè)樣例:

這是神經(jīng)網(wǎng)絡(luò)對(duì)于這張圖片的解釋,相當(dāng)精確:
('coral reef', 0.88503921),
('scuba diver', 0.025853464),
('brain coral', 0.0090828091),
('snorkel', 0.0036010914),
('promontory, headland, head, foreland', 0.0022605944)])上述內(nèi)容就是怎么深度學(xué)習(xí)Spark和TensorFlow,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章名稱:怎么深度學(xué)習(xí)Spark和TensorFlow
文章起源:http://www.chinadenli.net/article6/giccog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站維護(hù)、App開發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)