分布式名詞收集(二)

      網(wǎng)友投稿 834 2022-05-29

      原文:https://towardsdatascience.com/deep-learning-with-apache-spark-part-1-6d397c16abd

      Apache Spark的深度學(xué)習(xí) - 第1部分

      第一部分是關(guān)于如何使用Apache Spark進(jìn)行分布式深度學(xué)習(xí)的完整討論。這一部分:什么是Spark,Spark + DL的基礎(chǔ)知識(shí)以及更多內(nèi)容。你可以在這里紅色第二部分:使用Apache Spark進(jìn)行深度學(xué)習(xí) - 第2部分。

      第2部分可在此處獲得:使用Apache Spark進(jìn)行深度學(xué)習(xí) - 第2部分。

      Apache Spark的入門讀物

      如果您在數(shù)據(jù)世界中工作,那么您很有可能知道Apache Spark是什么。如果你沒(méi)有那沒(méi)關(guān)系!我會(huì)告訴你它是什么。

      Apache Spark TM。

      火花,由其創(chuàng)建者限定是一個(gè)快速和一般用于大規(guī)模數(shù)據(jù)處理引擎。

      該快速零件的意思是它的速度比以前的方法與大數(shù)據(jù)的工作就像經(jīng)典的MapReduce。更快的秘訣是Spark在內(nèi)存(RAM)上運(yùn)行,這使得處理速度比在磁盤上快得多。

      在一般的零件的意思是它可以使用多東西,比如運(yùn)行的分布式SQL,創(chuàng)建數(shù)據(jù)管道,提取數(shù)據(jù)到數(shù)據(jù)庫(kù)中,運(yùn)行機(jī)器學(xué)習(xí)算法,用圖表的工作,數(shù)據(jù)流等等。

      來(lái)自PySpark-Jeffrey Thompson的圖片。

      Apache Spark的主要抽象和開(kāi)始是彈性分布式數(shù)據(jù)集(RDD)。

      RDD是可以并行操作的容錯(cuò)的容錯(cuò)集合。您可以創(chuàng)建它們并行化驅(qū)動(dòng)程序中的現(xiàn)有集合,或引用外部存儲(chǔ)系統(tǒng)中的數(shù)據(jù)集,例如共享文件系統(tǒng),HDFS,HBase或提供Hadoop InputFormat的任何數(shù)據(jù)源。

      關(guān)于Spark的一些非常重要的事情是,所有轉(zhuǎn)換(我們將很快定義它)都是懶惰的,即他們不會(huì)立即計(jì)算結(jié)果。相反,他們只記得應(yīng)用于某些基礎(chǔ)數(shù)據(jù)集的轉(zhuǎn)換(例如文件)。僅當(dāng)操作需要將結(jié)果返回到驅(qū)動(dòng)程序時(shí)才會(huì)計(jì)算轉(zhuǎn)換。

      默認(rèn)情況下,每次對(duì)其執(zhí)行操作時(shí),都可以重新計(jì)算每個(gè)轉(zhuǎn)換后的RDD。但是,您也可以使用持久化(或緩存)方法在內(nèi)存中保留?RDD,在這種情況下,Spark會(huì)在群集上保留元素,以便在下次查詢時(shí)更快地訪問(wèn)。還支持在磁盤上保留RDD或在多個(gè)節(jié)點(diǎn)上復(fù)制。

      如果您現(xiàn)在想要了解有關(guān)Spark中RDD的轉(zhuǎn)換和操作的更多信息,請(qǐng)查看官方文檔:

      RDD編程指南 - Spark 2.3.0文檔

      Java,Scala和Python中的Spark 2.3.0編程指南spark.apache.org

      來(lái)自PySpark-Jeffrey Thompson的圖片。

      從Spark 2.0.0開(kāi)始,DataFrame是一個(gè)組織成命名列的數(shù)據(jù)集。它在概念上等同于關(guān)系數(shù)據(jù)庫(kù)中的表或R / Python中的數(shù)據(jù)框,但在底層具有更豐富的優(yōu)化。

      我們不會(huì)在這里討論數(shù)據(jù)集,但是它們被定義為可以從JVM對(duì)象構(gòu)造然后使用功能轉(zhuǎn)換進(jìn)行操作的分布式數(shù)據(jù)集合。它們僅在Scala和Java中可用(因?yàn)樗鼈兪擎I入的)。

      DataFrame可以從多種來(lái)源構(gòu)建,例如:結(jié)構(gòu)化數(shù)據(jù)文件,Hive中的表,外部數(shù)據(jù)庫(kù)或現(xiàn)有RDD。

      https://aspgems.com/blog/big-data/migrando-de-pandas-spark-dataframes

      簡(jiǎn)而言之,Dataframes API是Spark創(chuàng)建者在框架中輕松使用Data的方式。它們與Pandas Dataframes或R Dataframes非常相似,但有幾個(gè)優(yōu)點(diǎn)。第一個(gè)當(dāng)然是它們可以分布在一個(gè)集群中,因此它們可以處理大量數(shù)據(jù),第二個(gè)是它的優(yōu)化。

      這是社區(qū)采取的非常重要的一步。到2014年,使用Spark與Scala或Java的速度要快得多,并且由于性能的原因,整個(gè)Spark世界變成了Scala(這是一個(gè)很棒的語(yǔ)言順便說(shuō)一下)。但是使用DF API這不再是一個(gè)問(wèn)題,現(xiàn)在你可以在R,Python,Scala或Java中使用相同的性能。

      負(fù)責(zé)此優(yōu)化的是Catalyst。您可以將其視為向?qū)В麜?huì)接受您的查詢(哦,是的!,您可以在Spark中運(yùn)行類似SQL的查詢,針對(duì)DF運(yùn)行它們,并且它們也將并行化)以及您的操作并創(chuàng)建優(yōu)化的計(jì)劃用于分配計(jì)算。

      這個(gè)過(guò)程并不那么簡(jiǎn)單,但作為程序員你甚至都不會(huì)注意到它。剛才它一直在幫助你。

      深度學(xué)習(xí)和Apache Spark

      https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

      如果您想了解有關(guān)深度學(xué)習(xí)的更多信息,請(qǐng)?jiān)诶^續(xù)之前閱讀這些帖子:

      深度學(xué)習(xí)的“奇怪”介紹有關(guān)深度學(xué)習(xí)

      的精彩介紹,課程和博客文章。但這是一種不同的介紹。towardsdatascience.com

      我的深度學(xué)習(xí)之旅

      在這篇文章中,我將分享我如何研究深度學(xué)習(xí)并用它來(lái)解決數(shù)據(jù)科學(xué)問(wèn)題。這是一個(gè)...朝向dasascience.com

      為什么要在Apache Spark上進(jìn)行深度學(xué)習(xí)?

      這是我在開(kāi)始研究這個(gè)主題之前問(wèn)過(guò)自己的問(wèn)題。答案分為兩部分:

      Apache Spark是一個(gè)令人驚嘆的框架,用于以簡(jiǎn)單和聲明的方式在集群中分發(fā)計(jì)算。正在成為跨行業(yè)的標(biāo)準(zhǔn),因此將深度學(xué)習(xí)的驚人進(jìn)步添加到其中會(huì)很棒。

      深度學(xué)習(xí)的某些部分計(jì)算量很大,非常沉重!分發(fā)這些進(jìn)程可能是解決其他問(wèn)題的方法,而Apache Spark是我認(rèn)為分發(fā)它們的最簡(jiǎn)單方法。

      有幾種方法可以使用Apache Spark進(jìn)行深度學(xué)習(xí),我之前討論過(guò)它們,我在這里再次列出它們(并非詳盡無(wú)遺):

      1.?Elephas:帶Keras和PySpark的分布式DL:

      maxpumperla / elephas

      elephas - 使用Keras和Sparkgithub.com進(jìn)行分布式深度學(xué)習(xí)

      2.雅虎!公司:TensorFlowOnSpark:

      yahoo / TensorFlowOnSpark

      TensorFlowOnSpark將TensorFlow程序帶入Apache Spark集群github.com

      3. CERN分布式Keras(Keras + Spark):

      cerndb / dist-keras

      dist-keras - 分布式深度學(xué)習(xí),重點(diǎn)是分布式訓(xùn)練,使用Keras和Apache Spark。github.com

      4. Qubole(教程?Keras?+ Spark):

      Apache Spark上使用Keras進(jìn)行分布式深度學(xué)習(xí)?Qubole

      深度學(xué)習(xí)已被證明可以在不同的領(lǐng)域中生成高效的機(jī)器學(xué)習(xí)模型。一些...www.qubole.com

      5.英特爾公司:BigDL(Apache Spark的分布式深度學(xué)習(xí)庫(kù))

      intel-analytics / BigDL

      BigDL:Apache Sparkgithub.com的分布式深度學(xué)習(xí)庫(kù)

      深度學(xué)習(xí)管道

      Databricks

      但我將重點(diǎn)關(guān)注這些文章的是深度學(xué)習(xí)管道。

      databricks / spark-deep-learning

      spark-deep-learning - Apache Sparkgithub.com的深度學(xué)習(xí)管道

      Deep Learning Pipelines是由Databricks創(chuàng)建的一個(gè)開(kāi)源庫(kù),它使用Apache Spark為Python中的可擴(kuò)展深度學(xué)習(xí)提供高級(jí)API。

      這是一項(xiàng)非常棒的工作,不久就會(huì)被合并到官方API中,因此值得一看。

      與我之前列出的庫(kù)相比,該庫(kù)的一些優(yōu)點(diǎn)是:

      本著Spark和Spark MLlib的精神,它提供了易于使用的API,可以在極少數(shù)代碼行中實(shí)現(xiàn)深度學(xué)習(xí)。

      它著重于易用性和集成,而不會(huì)犧牲性能。

      它由Apache Spark的創(chuàng)建者(也是主要貢獻(xiàn)者)構(gòu)建,因此它更有可能被合并為官方API而不是其他人。

      它是用Python編寫的,因此它將與所有著名的庫(kù)集成,現(xiàn)在它使用TensorFlow和Keras的強(qiáng)大功能,這是目前DL的兩個(gè)主要庫(kù)。

      在下一篇文章中,我將完全關(guān)注DL管道庫(kù)以及如何從頭開(kāi)始使用它。您將看到的一件事是簡(jiǎn)單管道上的轉(zhuǎn)移學(xué)習(xí),如何使用預(yù)先訓(xùn)練的模型處理“少量”數(shù)據(jù)并能夠預(yù)測(cè)事物,如何通過(guò)深入了解公司中的每個(gè)人您在SQL中創(chuàng)建的學(xué)習(xí)模型等等。

      此外,我還將在Deep Cognition Platform中創(chuàng)建一個(gè)使用此庫(kù)在筆記本中工作的環(huán)境,以便您可以測(cè)試所有內(nèi)容。如果您沒(méi)有開(kāi)始,請(qǐng)繼續(xù)創(chuàng)建一個(gè)免費(fèi)帳戶:

      DeepCognition - 今天成為AI支持的組織

      ,無(wú)需編碼即可設(shè)計(jì),訓(xùn)練和部署深度學(xué)習(xí)模型。Deep Learning Studio簡(jiǎn)化并加速了...deepcognition.ai

      哦!!順便說(shuō)一句,如果你現(xiàn)在想要更多關(guān)于Python數(shù)據(jù)科學(xué)中的管道,請(qǐng)查看Matthew Mayo撰寫的這些精彩文章:

      使用Scikit-learn管道管理機(jī)器學(xué)習(xí)工作流程第1部分:溫和的介紹

      您是否熟悉Scikit-learn Pipelines?它們是一個(gè)非常簡(jiǎn)單但非常有用的管理機(jī)器的工具...www.kdnuggets.com

      使用Scikit-learn管道管理機(jī)器學(xué)習(xí)工作流程第2部分:集成網(wǎng)格搜索

      在上一篇文章中,我們將Scikit-learn管道作為簡(jiǎn)化機(jī)器學(xué)習(xí)工作流程的方法。www.kdnuggets.com

      使用Scikit-learn Pipelines管理機(jī)器學(xué)習(xí)工作流程第3部分:多個(gè)模型,管道......

      首先,我知道我承諾我們將在上一篇文章中過(guò)去玩具數(shù)據(jù)集,但為了進(jìn)行比較,我們將...www.kdnuggets.com

      有關(guān)Spark的管道簡(jiǎn)介請(qǐng)查看:

      ML Pipelines - Spark 2.3.0文檔

      Estimator提取學(xué)習(xí)算法或任何適合或訓(xùn)練數(shù)據(jù)的算法的概念。技術(shù)上......spark.apache.org

      再見(jiàn) :)

      原文:https://towardsdatascience.com/deep-learning-with-apache-spark-part-2-2a2938a36d35

      使用Apache Spark進(jìn)行深度學(xué)習(xí) - 第2部分

      第二部分是關(guān)于如何使用Apache Spark進(jìn)行分布式深度學(xué)習(xí)的完整討論。我將完全專注于DL管道庫(kù)以及如何從頭開(kāi)始使用它。您將看到的一件事是簡(jiǎn)單管道上的轉(zhuǎn)移學(xué)習(xí),如何使用預(yù)先訓(xùn)練的模型處理“少量”數(shù)據(jù)并能夠預(yù)測(cè)事物等等。

      大家好,歡迎回來(lái)學(xué)習(xí):)。在本文中,我將繼續(xù)討論使用Apache Spark進(jìn)行深度學(xué)習(xí)。你可以在這里看到第一部分。

      在這一部分中,我將完全關(guān)注DL管道庫(kù)以及如何從頭開(kāi)始使用它。

      Apache Spark時(shí)間線

      Apache Spark的持續(xù)改進(jìn)引導(dǎo)我們討論如何使用它進(jìn)行深度學(xué)習(xí)。我創(chuàng)建了一個(gè)詳細(xì)的Apache Spark開(kāi)發(fā)時(shí)間表,直到現(xiàn)在才看到我們?nèi)绾蔚竭_(dá)這里。

      很快,我將創(chuàng)建一篇包含此時(shí)間線描述的文章,但如果您認(rèn)為有什么遺漏請(qǐng)告訴我:)

      深度學(xué)習(xí)管道

      Databricks

      Deep Learning Pipelines是由Databricks創(chuàng)建的一個(gè)開(kāi)源庫(kù),它使用Apache Spark為Python中的可擴(kuò)展深度學(xué)習(xí)提供高級(jí)API。

      databricks / spark-deep-learning

      spark-deep-learning - Apache Sparkgithub.com的深度學(xué)習(xí)管道

      這是一項(xiàng)非常棒的工作,不久就會(huì)被合并到官方API中,因此值得一看。

      與使用DL加入Spark的庫(kù)相比,該庫(kù)的一些優(yōu)點(diǎn)是:

      本著Spark和Spark MLlib的精神,它提供了易于使用的API,可以在極少數(shù)代碼行中實(shí)現(xiàn)深度學(xué)習(xí)。

      它著重于易用性和集成,而不會(huì)犧牲性能。

      它由Apache Spark的創(chuàng)建者(也是主要貢獻(xiàn)者)構(gòu)建,因此它更有可能被合并為官方API而不是其他人。

      它是用Python編寫的,因此它將與所有著名的庫(kù)集成,現(xiàn)在它使用TensorFlow和Keras的強(qiáng)大功能,這是目前DL的兩個(gè)主要庫(kù)。

      深度學(xué)習(xí)管道建立在Apache Spark的ML?Pipelines之上,用于培訓(xùn),Spark DataFrames和SQL用于部署模型。它包含用于深度學(xué)習(xí)的常見(jiàn)方面的高級(jí)API,因此可以通過(guò)幾行代碼高效完成:

      圖像加載

      將預(yù)先訓(xùn)練的模型應(yīng)用于Spark ML管道中的變換器

      轉(zhuǎn)學(xué)習(xí)

      大規(guī)模應(yīng)用深度學(xué)習(xí)模型

      分布式超參數(shù)調(diào)整(下一部分)

      在DataFrames和SQL中部署模型

      我將描述每個(gè)噸?與實(shí)施例詳細(xì)ESE特征。這些例子來(lái)自Databricks?的官方筆記本。

      深度認(rèn)知的Apache Spark

      要運(yùn)行和測(cè)試本文中的代碼,您需要在Deep Cognition中創(chuàng)建一個(gè)帳戶。

      非常簡(jiǎn)單,然后您就可以訪問(wèn)他們的所有功能。當(dāng)您登錄時(shí),您應(yīng)該看到:

      現(xiàn)在只需單擊左側(cè)部分,即Notebook按鈕:

      你將在Jupyter筆記本上安裝所有已安裝的軟件包:)。哦!?這里有一個(gè)注意事項(xiàng):Spark筆記本電腦(DLS SPARK)即將推出的功能將在下個(gè)月的某個(gè)時(shí)候發(fā)布,并告知它仍處于私人測(cè)試狀態(tài)(僅適用于此帖)。

      您可以在此處下載完整的Notebook以查看所有代碼:

      https://github.com/FavioVazquez/deep-learning-pyspark

      在圖像上應(yīng)用深度學(xué)習(xí)的第一步是加載圖像的能力。深度學(xué)習(xí)管道包括實(shí)用程序功能,可以將數(shù)百萬(wàn)個(gè)圖像加載到DataFrame中,并以分布式方式自動(dòng)解碼,允許大規(guī)模操作。新版本的spark(2.3.0)也具備此功能,但我們將使用sparkdl庫(kù)。

      我們將使用由TensorFlow策劃的創(chuàng)作公共許可花卉照片存檔來(lái)測(cè)試它。要獲取花卉照片集,請(qǐng)從筆記本中運(yùn)行這些命令(我們還將創(chuàng)建一個(gè)示例文件夾):

      https://gist.github.com/FavioVazquez/33350294e31213ff761bf2ff51e25c4a

      讓我們從郁金香和雛菊文件夾中復(fù)制一些照片,以創(chuàng)建一小部分照片樣本。

      https://gist.github.com/FavioVazquez/8ce726807f6074c05a779ee4e5e3a4d0

      要在筆記本上查看這些圖像,您可以運(yùn)行以下命令:

      https://gist.github.com/FavioVazquez/efaa901f85b51c77d520595136a2cb52

      你應(yīng)該看到這個(gè)

      現(xiàn)在讓我們使用Spark將這些圖像作為DataFrame加載。該方法spark.readImage允許您以常見(jiàn)格式(jpg,png等)從HDFS存儲(chǔ)讀取圖像到DataFrame。每個(gè)圖像都以imageSchema格式存儲(chǔ)為一行。遞歸選項(xiàng)允許您從子文件夾中讀取圖像,例如正面和負(fù)面標(biāo)記的樣本。sampleRatio參數(shù)允許您在使用完整數(shù)據(jù)訓(xùn)練模型之前嘗試較小的圖像樣本。

      https://gist.github.com/FavioVazquez/85266329b7ef31411600f33c3b9eee1e

      如果我們看看這個(gè)數(shù)據(jù)幀,我們會(huì)看到它創(chuàng)建了一個(gè)列,稱為“圖像”。

      image_df.show()

      + -------------------- +

      | 圖片|

      + -------------------- +

      | [file:/ Users / favi ... |

      | [文件:/用戶/ FAVI ... |

      | [文件:/用戶/ FAVI ... |

      + -------------------- +

      image列包含一個(gè)字符串列,其中包含一個(gè)帶有schema == ImageSchema的圖像結(jié)構(gòu)。

      Databricks

      深度學(xué)習(xí)管道提供了用于對(duì)圖像執(zhí)行傳輸學(xué)習(xí)的實(shí)用程序,這是開(kāi)始使用深度學(xué)習(xí)的最快(代碼和運(yùn)行時(shí))方法之一。使用深度學(xué)習(xí)管道,只需幾行代碼就可以完成。

      深度學(xué)習(xí)管道能夠快速傳輸帶的概念學(xué)習(xí)Featurizer。以下示例將Spark中的InceptionV3模型和邏輯回歸組合在一起,以使InceptionV3適應(yīng)我們的特定域。DeepImageFeaturizer自動(dòng)剝離預(yù)先訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的最后一層,并使用所有先前層的輸出作為邏輯回歸算法的特征。由于邏輯回歸是一種簡(jiǎn)單而快速的算法,因此這種轉(zhuǎn)移學(xué)習(xí)訓(xùn)練可以使用比從頭開(kāi)始訓(xùn)練深度學(xué)習(xí)模型通常所需的圖像少得多的圖像來(lái)快速收斂。

      首先,我們需要為轉(zhuǎn)移學(xué)習(xí)創(chuàng)建培訓(xùn)和測(cè)試DataFrame。

      https://gist.github.com/FavioVazquez/84b0201f2ec0cbfc64fa3736bc7a76b5

      現(xiàn)在讓我們訓(xùn)練模型

      https://gist.github.com/FavioVazquez/96e13301b6286eb7b52f34faedce4c24

      讓我們看看該模型的表現(xiàn)如何:

      https://gist.github.com/FavioVazquez/27fa7de28011d41b192d723a185a9b87

      測(cè)試集精度=?0.9753086419753086

      一個(gè)例子并沒(méi)有那么糟糕,根本沒(méi)有調(diào)整!

      我們可以看看我們犯錯(cuò)誤的地方:

      https://gist.github.com/FavioVazquez/dcd72fe4f0f4204736d46ba57112cb97

      Deep Learning Pipelines支持使用Spark以分布式方式運(yùn)行預(yù)訓(xùn)練模型,可在批處理和流數(shù)據(jù)處理中使用。

      它包含一些最流行的模型,使用戶可以開(kāi)始使用深度學(xué)習(xí),而無(wú)需昂貴的培訓(xùn)模型步驟。當(dāng)然,模型的預(yù)測(cè)與Spark帶來(lái)的所有好處并行完成。

      除了使用內(nèi)置模型,用戶還可以在Spark預(yù)測(cè)管道中插入Keras模型和TensorFlow Graphs。這將單節(jié)點(diǎn)工具上的任何單節(jié)點(diǎn)模型轉(zhuǎn)換為可以以分布式方式應(yīng)用于大量數(shù)據(jù)的模型。

      以下代碼使用InceptionV3創(chuàng)建Spark預(yù)測(cè)管道,InceptionV3是用于圖像分類的最先進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型,并預(yù)測(cè)我們剛剛加載的圖像中的對(duì)象。

      https://gist.github.com/FavioVazquez/b6e4ab8787f4bd4a7186d858a86c3521

      我們來(lái)看一下預(yù)測(cè)數(shù)據(jù)幀:

      predictions_df.select(?“predicted_labels”)。顯示(截?cái)?假,N?=?3)

      + ---------------- +

      | predict_labels | | |

      + ---------------- +

      | [[n03930313,picket_fence,0.1424783],[n11939491,daisy,0.10951301],[n03991062,pot,0.04505],[n02206856,bee,0.03734662 ],[n02280649,cabbage_butterfly,0.019011213],[n13133613,ear,0.017185668],[n02219486,ant,0.014198389],[n02281406,sulphur_butterfly,0.013113698],[n12620546,hip,0.012272579],[n03457902,greenhouse,0.011370744]] |

      |?[[n11939491,daisy,0.9532104],[n02219486,ant,6.175268E-4],[n02206856,bee,5.1203516E-4],[n02190166,fly,4.0093894E-4],[n02165456,ladybug,3.70687E-?4],[n02281406,sulphur_butterfly,3.0587992E-4],[n02112018,Pomeranian,2.9011074E-4],[n01795545,black_grouse,2.5667972E-4],[n02177972,weevil,2.4875381E-4],[n07745940,草莓,2.3729511E-4]]?|

      | [[n11939491,daisy,0.89181453],[n02219486,ant,0.0012404523],[n02206856,bee,8.13047E-4],[n02190166,fly,6.03804E-4],[n02165456,ladybug,6.005444E-4], [n02281406,sulphur_butterfly,5.32096E-4],[n04599235,wool,4.6653638E-4],[n02112018,Pomeranian,4.625338E-4],[n07930864,cup,4.400617E-4],[n02177972,weevil,4.2434104 E-4]] |

      + ---------------- +

      僅顯示前3行

      請(qǐng)注意,該predicted_labels列顯示“菊花”作為使用此基本模型的所有樣本花的高概率類,由于某種原因,郁金香更接近柵欄而不是花(可能是因?yàn)檎掌谋尘埃?/p>

      然而,從概率值的差異可以看出,神經(jīng)網(wǎng)絡(luò)具有識(shí)別兩種花類型的信息。因此,我們上面的轉(zhuǎn)移學(xué)習(xí)示例能夠從基礎(chǔ)模型開(kāi)始正確地學(xué)習(xí)雛菊和郁金香之間的差異。

      讓我們看看我們的模型如何識(shí)別花的類型:

      https://gist.github.com/FavioVazquez/271c069453b5917d85aeec0001d54624

      要使用Spark以分布式方式應(yīng)用Keras模型,請(qǐng)使用KerasImageFileTransformerTensorFlow支持的Keras模型。它

      通過(guò)將用戶指定的圖像加載和處理函數(shù)應(yīng)用于包含一列圖像URI的輸入DataFrame,在內(nèi)部創(chuàng)建包含一列圖像的DataFrame

      從給定的模型文件路徑加載Keras模型

      將模型應(yīng)用于圖像DataFrame

      要使用變壓器,我們首先需要將Keras模型存儲(chǔ)為文件。對(duì)于這款筆記本,我們只需保存Keras內(nèi)置的InceptionV3模型而不是訓(xùn)練模型。

      https://gist.github.com/FavioVazquez/bc7d280cd98a7112cb96f13cded20259

      現(xiàn)在我們將創(chuàng)建一個(gè)Keras變換器,但首先我們將預(yù)處理圖像以使用它

      https://gist.github.com/FavioVazquez/b1a43d8611e1fd2db9a3c61742156e97

      我們現(xiàn)在將讀取圖像并將它們加載到Spark Dataframe中,然后使用我們的變換器將模型應(yīng)用到圖像中:

      https://gist.github.com/FavioVazquez/531c2852f936e4a2cbbe2f4afbad47d5

      如果我們看一下帶有預(yù)測(cè)的數(shù)據(jù)幀,我們會(huì)看到很多信息,而這只是InceptionV3模型中每個(gè)類的概率。

      深度學(xué)習(xí)管道還提供了應(yīng)用具有張量輸入(最多2維)的模型的方法,用流行的深度學(xué)習(xí)庫(kù)編寫:

      TensorFlow圖

      Keras型號(hào)

      在本文中,我們將只關(guān)注Keras模型。將KerasTransformerTensorFlow支持的Keras模型應(yīng)用于最多2維的張量輸入。它從給定的模型文件路徑加載Keras模型,并將模型應(yīng)用于數(shù)組列(其中數(shù)組對(duì)應(yīng)于Tensor),輸出一列數(shù)組。

      https://gist.github.com/FavioVazquez/bab4fbf9c39aade9b92dbbea95127cec

      final_df.show()

      + ------------- + -------------------- +

      | 預(yù)測(cè)| 功能|

      + ------------- + -------------------- +

      | [0.86104786] | [-0.76344526,0.2 ... |

      | [0.21693115] | [0.41084298,0.93 ... |

      | [0.057743043] | [0.062970825,0.3 ... |

      | [0.43409333] | [-0.43408343,-1 .... |

      | [0.43690935] | [-0.89413625,0.8 ... |

      | [0.49984664] | [-0.82052463,-0 .... |

      | [0.6204273] | [-0.5075533,0.54 ... |

      | [0.2285336] | [0.016106872,-0 .... |

      | [0.37478408] | [-1.6756374,0.84 ... |

      | [0.2997861] | [-0.34952268,1.2 ... |

      | [0.3885377] | [0.1639214,-0.22 ... |

      | [0.5006814] | [0.91551965,-0.3 ... |

      | [0.20518135] | [-1.2620118,-0.4 ... |

      | [0.18882117] | [-0.14812712,0.8 ... |

      | [0.49993372] | [1.4617485,-0.33 ... |

      | [0.42390883] | [-0.877813,0.603 ... |

      | [0.5232896] | [-0.031451378,-1 ... |

      | [0.45858437] | [0.9310042,-1.77 ... |

      | [0.49794272] | [-0.37061003,-1 .... |

      | [0.2543479] | [0.41954428,1.88 ... |

      + ------------- + -------------------- +

      僅顯示前20行

      生成模型的一種方法是將其部署為Spark SQL用戶定義函數(shù),該函數(shù)允許任何知道SQL的人使用它。深度學(xué)習(xí)管道提供了采用深度學(xué)習(xí)模型并注冊(cè)Spark SQL用戶定義函數(shù)(UDF)的機(jī)制。特別是,Deep Learning Pipelines 0.2.0增加了對(duì)從處理圖像數(shù)據(jù)的Keras模型創(chuàng)建SQL UDF的支持。

      生成的UDF采用一列(格式化為圖像結(jié)構(gòu)“SpImage”)并生成給定Keras模型的輸出;?例如,對(duì)于Inception V3,它會(huì)在ImageNet對(duì)象類別上生成實(shí)值分?jǐn)?shù)向量。

      https://gist.github.com/FavioVazquez/3a36edf25a289f4ee31cff1bf3857467

      在處理圖像的Keras工作流程中,在將模型應(yīng)用于圖像之前,通常會(huì)有預(yù)處理步驟。如果我們的工作流程需要預(yù)處理,我們可以選擇為UDF注冊(cè)提供預(yù)處理功能。預(yù)處理器應(yīng)該接收文件路徑并返回一個(gè)圖像數(shù)組;?下面是一個(gè)簡(jiǎn)單的例子。

      https://gist.github.com/FavioVazquez/a02094a5848ab1f7e42ce52820a09fbe

      分布式名詞收集(二)

      注冊(cè)UDF后,可以在SQL查詢中使用它:

      https://gist.github.com/FavioVazquez/af566a98d19952eb0b61938c4752f7dc

      這非常強(qiáng)大。一旦數(shù)據(jù)科學(xué)家構(gòu)建了所需的模型,深度學(xué)習(xí)管道就可以很容易地將其作為SQL中的函數(shù)公開(kāi),因此組織中的任何人都可以使用它 - 數(shù)據(jù)工程師,數(shù)據(jù)科學(xué)家,業(yè)務(wù)分析師,任何人。

      sparkdl.registerKerasUDF("awesome_dl_model",?"/mymodels/businessmodel.h5")

      接下來(lái),組織中的任何用戶都可以在SQL中應(yīng)用預(yù)測(cè):

      SELECT image, awesome_dl_model(image) label FROM images

      WHERE contains(label, “Product”)

      在下一部分中,我將討論使用Spark的分布式超參數(shù)調(diào)優(yōu),并將嘗試新的模型和示例:)。

      如果您想與我聯(lián)系,請(qǐng)務(wù)必在Twitter上關(guān)注我

      原文:https://medium.com/@lavishj77/apache-spark-fundamentals-part-1-918d2a404e86

      Apache Spark基礎(chǔ)知識(shí)(第1部分)

      數(shù)據(jù)正在當(dāng)今世界廣泛生產(chǎn),并且將來(lái)會(huì)更快地生成。世界上生產(chǎn)的總數(shù)據(jù)的90%僅在過(guò)去兩年內(nèi)生成,估計(jì)到2020年世界總數(shù)據(jù)將達(dá)到45 ZB,并且如果我們嘗試將其存儲(chǔ)在藍(lán)色中,那么每天生成的數(shù)據(jù)就足夠了光盤(每個(gè)50 GB)并將這些光盤一個(gè)堆疊在另一個(gè)之上,然后該堆疊的高度將等于四個(gè)堆疊在另一個(gè)之上的埃菲爾鐵塔。使用傳統(tǒng)的關(guān)系SQL數(shù)據(jù)庫(kù)無(wú)法存儲(chǔ)和處理大量的結(jié)構(gòu)化,非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)。

      Apache Spark是一個(gè)開(kāi)源?并行處理?框架,用于跨群集計(jì)算機(jī)存儲(chǔ)和處理大數(shù)據(jù)。Spark可以比Hadoop更快地執(zhí)行計(jì)算,而Hadoop和Spark可以有效地一起使用。Spark是用Scala編寫的,Scala被認(rèn)為是與Spark Core引擎交互的主要語(yǔ)言。Spark還提供Java,Python和R編程語(yǔ)言的API。這篇博客中的代碼將在PySpark中,它是Spark的python API。Spark可以在獨(dú)立的集群模式下運(yùn)行,它可以運(yùn)行在不同類型的集群上,例如Hadoop YARN集群,Mesos,AWS EC2,Kubernetes分布式網(wǎng)絡(luò)。

      在這一部分中,討論了火花簇的體系結(jié)構(gòu)。

      Spark集群架構(gòu)

      Apache Spark遵循具有集群管理器的主/從體系結(jié)構(gòu)。火花星團(tuán)有一個(gè)主人和任意數(shù)量的奴隸/工人。一個(gè)驅(qū)動(dòng)

      程序和星火語(yǔ)境駐留在主控守護(hù)程序和執(zhí)行者是駐留在從屬守護(hù)神。

      驅(qū)動(dòng)程序:驅(qū)動(dòng)程序是包含主程序的程序,主程序是程序的起點(diǎn)。類似地,在Java中,包含public static void main(String args [])的類是驅(qū)動(dòng)程序。在Spark驅(qū)動(dòng)程序中,程序駐留在主節(jié)點(diǎn)上,它創(chuàng)建并擁有Spark Context。驅(qū)動(dòng)程序通過(guò)端口4040上的Web UI公開(kāi)有關(guān)正在運(yùn)行的Spark應(yīng)用程序的信息。

      Spark Context:它是Spark功能的主要入口點(diǎn)。任何Spark驅(qū)動(dòng)程序應(yīng)用程序的第一步是創(chuàng)建Spark Context。它允許Spark驅(qū)動(dòng)程序通過(guò)資源管理器訪問(wèn)集群,該資源管理器可以是YARN或其他,并且可以用于在該集群上創(chuàng)建RDD,累加器和廣播變量。Spark Context還通過(guò)定期發(fā)送心跳消息來(lái)跟蹤實(shí)時(shí)執(zhí)行程序。為了創(chuàng)建Spark Context,必須創(chuàng)建SparkConf。SparkConf存儲(chǔ)驅(qū)動(dòng)程序應(yīng)用程序?qū)鬟f給Spark Context的配置參數(shù)。

      來(lái)自pyspark導(dǎo)入SparkContext,SparkConf

      config = SparkConf()。setAppName(“app_name”)。setMaster(master)

      sc = SparkContext(conf = config)

      master是群集的URL或以本地模式運(yùn)行的“本地”字符串。

      在PySpark中,已經(jīng)初始化了一個(gè)spark context sc。每個(gè)JVM只能激活一個(gè)SparkContext。如果你想創(chuàng)建另一個(gè)SparkContext,那么必須首先停止活動(dòng),然后使用sc.stop()函數(shù)完成,然后創(chuàng)建新的SparkContext。如果要重用已停止的SparkContext,則可以使用-sc = SparkContext.getorcreate(conf)

      來(lái)完成??。創(chuàng)建Spark上下文后,Spark Driver應(yīng)用程序知道必須使用哪個(gè)資源管理器并向其詢問(wèn)集群上的資源。在YARN的情況下,資源管理器和節(jié)點(diǎn)管理器工作以為執(zhí)行程序分配容器。

      執(zhí)行程序??:它是從屬節(jié)點(diǎn)上RAM的一部分,其中包含數(shù)據(jù)塊和要實(shí)現(xiàn)的任務(wù)或代碼。每個(gè)spark應(yīng)用程序都有自己的執(zhí)行程序進(jìn)程。

      Cluster Manager:負(fù)責(zé)獲取spark群集上的資源并將其分配給spark作業(yè)的服務(wù)。Spark應(yīng)用程序可以利用3種不同類型的集群管理器來(lái)分配和釋放各種物理資源,例如客戶端火花作業(yè),CPU內(nèi)存等的內(nèi)存.Hadoop YARN,Apache Mesos或簡(jiǎn)單的獨(dú)立火花集群管理器,它們中的任何一個(gè)可以在內(nèi)部或云中啟動(dòng),以便運(yùn)行spark應(yīng)用程序。

      Spark工作生命周期

      當(dāng)客戶端提交spark用戶應(yīng)用程序代碼時(shí),驅(qū)動(dòng)程序隱式地將包含轉(zhuǎn)換和動(dòng)作的代碼轉(zhuǎn)換為邏輯有向非循環(huán)圖(DAG)(稍后將討論)。然后,它將邏輯DAG轉(zhuǎn)換為具有一組階段的物理執(zhí)行計(jì)劃。在創(chuàng)建物理執(zhí)行計(jì)劃之后,它會(huì)

      在每個(gè)階段創(chuàng)建稱為任務(wù)的小型物理執(zhí)行單元。然后捆*綁任務(wù)以發(fā)送到Spark Cluster。

      然后,驅(qū)動(dòng)程序與集群管理器進(jìn)行通信并協(xié)商資源。然后,集群管理器代表驅(qū)動(dòng)程序在工作節(jié)點(diǎn)上啟動(dòng)執(zhí)行程序。此時(shí),驅(qū)動(dòng)程序根據(jù)數(shù)據(jù)放置將任務(wù)發(fā)送到集群管理器。在執(zhí)行程序開(kāi)始執(zhí)行之前,它們會(huì)使用驅(qū)動(dòng)程序注冊(cè)自己,以便驅(qū)動(dòng)程序可以全面查看所有執(zhí)行程序。現(xiàn)在執(zhí)行程序開(kāi)始執(zhí)行驅(qū)動(dòng)程序分配的各種任務(wù)。在spark應(yīng)用程序運(yùn)行的任何時(shí)間點(diǎn),驅(qū)動(dòng)程序?qū)⒈O(jiān)視運(yùn)行的執(zhí)行程序集。spark系統(tǒng)中的驅(qū)動(dòng)程序還通過(guò)跟蹤緩存數(shù)據(jù)的位置,根據(jù)數(shù)據(jù)放置來(lái)安排未來(lái)的任務(wù)。當(dāng)驅(qū)動(dòng)程序main()方法退出或調(diào)用Spark的stop()方法時(shí)

      在Context中,它將終止所有執(zhí)行程序并從集群管理器中釋放資源。

      這就是這一部分。在下一部分中,我們將討論Spark RDD及其操作。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:當(dāng)物聯(lián)網(wǎng)遇到區(qū)塊鏈
      下一篇:Kubernetes 集群監(jiān)控 kube-prometheus 部署
      相關(guān)文章
      亚洲国产成+人+综合| 成人区精品一区二区不卡亚洲| 亚洲Av熟妇高潮30p| 亚洲成av人片在线看片| 亚洲国产精品乱码一区二区 | 亚洲国产成人五月综合网| 亚洲国产欧美日韩精品一区二区三区 | 在线亚洲精品视频| 亚洲av无码专区亚洲av不卡| 亚洲码和欧洲码一码二码三码| 亚洲自偷自偷在线成人网站传媒| 亚洲免费福利在线视频| 亚洲三级高清免费| 亚洲粉嫩美白在线| 亚洲日本va在线观看| 中文字幕亚洲综合小综合在线| 亚洲AV无码成人专区| 亚洲综合一区国产精品| 亚洲欧美日韩国产精品一区| 亚洲精品第一国产综合亚AV| 日韩国产精品亚洲а∨天堂免| 国产成人综合亚洲| 亚洲国产精品国产自在在线| 久久乐国产精品亚洲综合| 精品亚洲成α人无码成α在线观看| 自拍偷自拍亚洲精品第1页 | 亚洲国产成人a精品不卡在线| www国产亚洲精品久久久| 亚洲成年看片在线观看| 亚洲精品偷拍视频免费观看| 国产偷窥女洗浴在线观看亚洲| 亚洲色精品vr一区二区三区| 久久亚洲国产精品五月天| 无码乱人伦一区二区亚洲| 91亚洲国产在人线播放午夜| 精品亚洲成a人片在线观看少妇| 亚洲成人免费电影| 久久亚洲最大成人网4438| 2020久久精品亚洲热综合一本| 亚洲AV日韩综合一区| 亚洲人成电影在线播放|