人工智能的英文全名為Artificial Intelligence,我們通常簡稱為AI。廣義上講,AI可以指任何能夠從事某種智能活動的計(jì)算機(jī)程序。近年來深度學(xué)習(xí)在AI領(lǐng)域表現(xiàn)尤為突出,在這里我們可以簡單的把AI理解為深度學(xué)習(xí)。
深度學(xué)習(xí)由深層神經(jīng)網(wǎng)絡(luò)算法構(gòu)成,大量的神經(jīng)元輸入通過不斷的迭代更新參數(shù)完成模型定型。深度學(xué)習(xí)的計(jì)算強(qiáng)度較高,對于規(guī)模非常大的數(shù)據(jù)集而言,速度很重要。主流的深度學(xué)習(xí)框架有TensorFlow、Caffe、Keras、Theano等,它們大多在單節(jié)點(diǎn)服務(wù)器通過GPU加速完成模型訓(xùn)練。隨著大數(shù)據(jù)時代的來臨,采用分布式計(jì)算極大提高了計(jì)算性能。因此將分布式計(jì)算與深度學(xué)習(xí)結(jié)合成為必然趨勢。 DL4J就是基于這樣的思想誕生的,是應(yīng)用最廣泛的JVM開源深度學(xué)習(xí)框架,它可以利用Spark在多臺服務(wù)器多個GPU上開展分布式的深度學(xué)習(xí)模型訓(xùn)練,讓模型跑得再快一點(diǎn)。
運(yùn)用Deeplearning4J高效的訓(xùn)練一個完整神經(jīng)網(wǎng)絡(luò)模型包括:神經(jīng)網(wǎng)絡(luò)輸入數(shù)據(jù)ETL、配置神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)、設(shè)置參數(shù)監(jiān)測可視化界面、模型訓(xùn)練、模型評估、模型保存與加載。本期“安仔課堂”,ISEC實(shí)驗(yàn)室的老師為大家詳解如何運(yùn)用DL4J構(gòu)建AI模型。
一、數(shù)據(jù)ETL
神經(jīng)網(wǎng)絡(luò)所能識別的輸入數(shù)據(jù)是向量,訓(xùn)練中涉及大量的矩陣運(yùn)算。ND4J是神經(jīng)網(wǎng)絡(luò)訓(xùn)練進(jìn)行必要的線性代數(shù)和微積分運(yùn)算的科學(xué)計(jì)算庫,讓Java能夠訪問所需的原生庫,能夠使用多個CPU或GPU快速處理矩陣數(shù)據(jù)。DataVec是基于ND4J之上的一個工具包,通過它可以方便的對數(shù)據(jù)攝取、清理、聯(lián)接、縮放、標(biāo)準(zhǔn)化和轉(zhuǎn)換等處理,快速的將圖像、視頻、聲音、文本和時間序列等原始數(shù)據(jù)轉(zhuǎn)變?yōu)樘卣飨蛄浚斎肷窠?jīng)網(wǎng)絡(luò)。示例如下:
圖1
二、配置網(wǎng)絡(luò)結(jié)構(gòu)
MultiLayerConfiguration是用來設(shè)定網(wǎng)絡(luò)的層及其超參數(shù)。超參數(shù)是決定神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)方式的變量,包括模型的權(quán)重更新次數(shù)、如何初始化權(quán)重、為節(jié)點(diǎn)添加哪些激活函數(shù)、使用哪些優(yōu)化算法以及模型的學(xué)習(xí)速度,通過調(diào)用layer添加網(wǎng)絡(luò)層,指定其在所有層中的先后位置、輸入及輸出節(jié)點(diǎn)數(shù)nIn和nOut。網(wǎng)絡(luò)配置的示例如下:
圖2
三、模型訓(xùn)練
DL4J能夠依靠Spark來實(shí)現(xiàn)數(shù)據(jù)并行,以并行方式訓(xùn)練模型,對這些模型產(chǎn)生的參數(shù)進(jìn)行迭代式平均化,得到一個中央模型。首先創(chuàng)建一個TrainingMaster實(shí)例,指定分布式訓(xùn)練的實(shí)際開展方式,然后用網(wǎng)絡(luò)配置和TrainingMaster對象創(chuàng)建SparkDl4jMultiLayer實(shí)例,最后SparkDl4jMultiLayer實(shí)例調(diào)用fit方法傳入數(shù)據(jù)進(jìn)行模型訓(xùn)練。
圖3
四、設(shè)置可視化界面
用戶界面可以在瀏覽器中對網(wǎng)絡(luò)狀態(tài)以及定型參數(shù)進(jìn)行可視化。該用戶界面通常用于調(diào)試神經(jīng)網(wǎng)絡(luò),亦即通過選擇合適的超參數(shù)來提高網(wǎng)絡(luò)性能。在配合Spark使用時可以分兩個步驟,首先收集并保存相關(guān)統(tǒng)計(jì)數(shù)據(jù),隨后再進(jìn)行可視化:
圖4
之后可以用如下代碼加載并顯示已保存的信息:
圖5
五、模型評估
模型訓(xùn)練完成后通常需要用一定數(shù)量的測試集來測試模型效果,這里可以直接調(diào)用doEvaluation方法對測試數(shù)據(jù)集進(jìn)行模型測試,調(diào)用evaluation.stats()可以輸出測試信息。
圖6
輸出結(jié)果:
圖7
輸出結(jié)果信息說明:
Accuracy(準(zhǔn)確率):模型準(zhǔn)確識別出的數(shù)量占總數(shù)的百份比;
Precision(精確率):真正例的數(shù)量除以真正例與假正例的數(shù)之和;
Recall(召回率):真正例的數(shù)量除以真正例與假負(fù)例數(shù)之和;
F1 Score(F1值):精確率和召回率的加權(quán)平均值。
六、模型保存與加載
模型訓(xùn)練完成后需要將模型保存以供模型加載部署。ModelSerializer是用于加載和保存模型的類。
圖8
以上步驟完整的完成了一個基于DL4J深度學(xué)習(xí)的建模方式,我們可將代碼打包提交到Spark集群運(yùn)行。該模型可以在分布式環(huán)境中利用GPU實(shí)現(xiàn)高效運(yùn)算,提升模型訓(xùn)練效率。
聯(lián)系客服