资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结
資深算法工程師萬宮璽:Java工程師轉(zhuǎn)型AI的秘密法寶——深度學(xué)習(xí)框架Deeplearning4j | 分享總結(jié)
| 本文作者:楊文 | 2018-01-02 11:03 |
雷鋒網(wǎng)AI研習(xí)社按:深度學(xué)習(xí)是人工智能發(fā)展最為迅速的領(lǐng)域之一,Google、Facebook、Microsoft等巨頭都圍繞深度學(xué)習(xí)重點(diǎn)投資了一系列新興項(xiàng)目,他們也一直在支持一些開源深度學(xué)習(xí)框架。目前研究人員使用的深度學(xué)習(xí)框架有 TensorFlow、Torch 、Caffe、Theano、Deeplearning4j等,而Deeplearning4j是為數(shù)不多以Java/JVM為基礎(chǔ),能與Apache Spark無縫結(jié)合,支持CPU/GPU集群分布式計(jì)算的開源框架。本文就來為大家詳細(xì)介紹一下深度學(xué)習(xí)框架Deeplearning4j的重要組件,不同環(huán)境下的操作用法及實(shí)例分享。
在近期雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))AI研習(xí)社的線上分享會,來自蘇寧易購搜索技術(shù)研發(fā)部的資深算法工程師萬宮璽為大家介紹了Deeplearning4框架的構(gòu)成、主要功能模塊并結(jié)合實(shí)例講述具體的使用方法。
視頻回放鏈接:http://www.mooc.ai/open/course/333
萬宮璽,蘇州大學(xué)碩士,現(xiàn)就職于蘇寧易購搜索技術(shù)研發(fā)部,從事自然語言處理、機(jī)器視覺等領(lǐng)域的應(yīng)用開發(fā)工作。熟悉諸如Deeplearning4j、Keras等開源深度學(xué)習(xí)框架。
以下為主要分享內(nèi)容:
分享主題為:基于Java的開源深度學(xué)習(xí)框架-Deeplearning4j的介紹與實(shí)例分享。(
分享內(nèi)容可概括以下四方面:
-
Deeplearning4j生態(tài)圈主要功能模塊的介紹
-
Deeplearning4j單機(jī)/并行/分布式建模過程介紹
-
Deeplearning4j對遷移學(xué)習(xí)、強(qiáng)化學(xué)習(xí)的支持
-
基于Fashion Mnist數(shù)據(jù)集的圖像分類應(yīng)用的開發(fā)、部署、上線實(shí)例
第一部分內(nèi)容具體為DL4j的開源庫背景,目前的項(xiàng)目進(jìn)展情況和背后的支撐團(tuán)隊(duì)。
第二部分為DL4j的生態(tài)圈,主要介紹生態(tài)圈中最重要的三個(gè)模塊:DL4j本身,它所依賴的張量預(yù)算庫ND4j、DL4j當(dāng)中做數(shù)據(jù)ETL的庫DataVec。
DL4j本身,它定義并且實(shí)現(xiàn)了比較經(jīng)典的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),比如圖片中比較常用的卷積神經(jīng)網(wǎng)絡(luò)。機(jī)器學(xué)習(xí)都需要依賴一個(gè)張量運(yùn)算框架,對于DL4j,他依賴的是ND4j這樣一個(gè)框架,libnd4j是ND4j調(diào)用的一個(gè)庫。
Model Zoo 是官方給出的經(jīng)典神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)現(xiàn)。包括AlexNet,GoogLenet ,DeepFace,YOLO等。Modle Zoo在0.9.0版本之前是作為一個(gè)獨(dú)立的工程存在的,0.9.0之后的版本作為DL4j本身的一個(gè)模塊,已經(jīng)嵌入進(jìn)去。
DL4j所依賴的張量運(yùn)算庫ND4J,ND4j可當(dāng)作JAVA 版的Numpy。
ND4j內(nèi)存管理情況:
ND4j利用了堆外內(nèi)存和堆上內(nèi)存兩個(gè)部分的內(nèi)存做相應(yīng)的計(jì)算。當(dāng)用ND4j去聲明一個(gè)具體的張量時(shí)候,是在堆外內(nèi)存存儲張量對象,堆上內(nèi)存只存儲張量對象的引用。設(shè)計(jì)的原因主要是我們所依賴張量運(yùn)算庫,大部分的運(yùn)算空間都是在堆外內(nèi)存上,把數(shù)據(jù)放到堆外內(nèi)存可提高運(yùn)行效率。
需要注意的是,用ND4j做神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時(shí),堆外內(nèi)存一定要調(diào)的非常大,因?yàn)榇罅康墓ぷ鞫际窃诙淹鈨?nèi)存做相應(yīng)的張量運(yùn)算。堆外內(nèi)存要遠(yuǎn)遠(yuǎn)大于堆上內(nèi)存。
ND4j具體例子,第一個(gè)是如何去創(chuàng)建一個(gè)張量,并且把這個(gè)張量在底層存儲的順序打印出來。
第二個(gè)是hadmard乘積實(shí)現(xiàn)。用直白的話解釋就是,兩個(gè)張量相應(yīng)的位置去做乘積,把這個(gè)結(jié)果形成新的向量,作為下一部分利用的結(jié)果,這個(gè)操作在包括卷積上面都是比較常用的。
數(shù)據(jù)ETL庫,稱之為DataVec, 它的主要功能就是把語音信號,圖片文件,文本文檔轉(zhuǎn)化為張量形式,做數(shù)據(jù)ETL.
總結(jié)DataVec庫的作用:它可以將非結(jié)構(gòu)化數(shù)據(jù)經(jīng)過處理轉(zhuǎn)化變成張量型數(shù)據(jù),也支持結(jié)構(gòu)化數(shù)據(jù)的讀取。
第三個(gè)部分怎么建模。分三個(gè)場景,第一個(gè)是本地單機(jī)建模;第二個(gè)是有多個(gè)CPU或多個(gè)GPU卡情況下怎么做并行建模;第三個(gè)是怎么和Spark結(jié)合做分布式的DL4j模型的建模。
建模的四個(gè)步驟并不是固定的,可以根據(jù)實(shí)際情況做靈活的處理。大致思路首先是生成這樣一個(gè)訓(xùn)練,測試,驗(yàn)證數(shù)據(jù)集。
本地單機(jī)建模,首先是加載數(shù)據(jù)(包括本地?cái)?shù)據(jù)和測試數(shù)據(jù)),其次是配置模型結(jié)構(gòu)以及超參數(shù),并初始化模型參數(shù)。最后,訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,并利用測試數(shù)據(jù)集進(jìn)行評估。
數(shù)據(jù)并行化:
并行建模如圖所示:
怎么和Spark結(jié)合做一個(gè)分布式的Dp4j模型的建模:
想要在Spark上面開發(fā)的同學(xué),需要注意Spark的版本,因?yàn)镈L4j支持1.5、1.6 還有2.0之后的版本??蚣芙咏?.0版本的發(fā)布,真正原生態(tài)支持Spark 并不多,DL4j和Spark的結(jié)合是它的一大亮點(diǎn)。
第四部分是強(qiáng)化學(xué)習(xí)模塊,稱之為RL4j ,也是生態(tài)系統(tǒng)當(dāng)中的一個(gè)組件。
遷移學(xué)習(xí)和強(qiáng)化學(xué)習(xí)在DL4j的支持情況:
具體應(yīng)用實(shí)例分享:
關(guān)于Deeplearning4j 的總結(jié):
個(gè)人在做AI方面的心得體會:
-
機(jī)器學(xué)習(xí)是AI的主要解決方案,但不是唯一方案。
-
深度學(xué)習(xí)并不是萬能的,對于非結(jié)構(gòu)化數(shù)據(jù):圖像、文本、語音會有出色的效果,但傳統(tǒng)機(jī)器學(xué)習(xí)模型同樣很重要。
-
數(shù)據(jù)的質(zhì)和量在實(shí)際的應(yīng)用中共同決定了模型的泛化能力。
-
轉(zhuǎn)型AI同樣可以從Hello World 入手。
-
提升AI內(nèi)功必須精通原理,而不僅僅跑出Demo。
-
不要局限于某一特定工具框架,可以取長補(bǔ)短。
-
遷移學(xué)習(xí)和強(qiáng)化學(xué)習(xí)可能代表AI的未來。
如果想詳細(xì)了解深度學(xué)習(xí)的應(yīng)用,如何做開發(fā),怎么去訓(xùn)練他的模型,怎么去調(diào)優(yōu),怎么去部署上線點(diǎn)擊下面的視頻可回顧本期內(nèi)容。
雷鋒網(wǎng)AI慕課學(xué)院視頻回放鏈接:http://www.mooc.ai/open/course/333
總結(jié)
以上是生活随笔為你收集整理的资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python pandas datafr
- 下一篇: 大数据分析:Java 下降,华为平均月薪