使用Eclipse Deeplearning4j构建简单的神经网络
神經(jīng)網(wǎng)絡(luò)導(dǎo)論
深度學(xué)習(xí)既包含深度神經(jīng)網(wǎng)絡(luò)又包含深度強化學(xué)習(xí),這是機器學(xué)習(xí)的子集,而機器學(xué)習(xí)本身就是人工智能的子集。 廣義上講,深度神經(jīng)網(wǎng)絡(luò)執(zhí)行機器感知,該機器感知從原始數(shù)據(jù)中提取重要特征,并對每個觀察結(jié)果做出某種預(yù)測。 示例包括識別圖像中表示的對象,將模擬語音映射到書面轉(zhuǎn)錄,按情感對文本進(jìn)行分類以及對時間序列數(shù)據(jù)進(jìn)行預(yù)測。
盡管神經(jīng)網(wǎng)絡(luò)是上世紀(jì)發(fā)明的,但直到最近才引起人們更多的興奮。 現(xiàn)在已經(jīng)有了利用神經(jīng)網(wǎng)絡(luò)概念的計算能力,它們已被用于在計算機視覺,自然語言處理和強化學(xué)習(xí)等領(lǐng)域設(shè)置新的最新技術(shù)成果。 DeepMind的科學(xué)家實現(xiàn)了一項眾所周知的深度學(xué)習(xí)成就,他創(chuàng)造了一個名為AlphaGo的計算機程序,該程序在2016年和2017年分別擊敗了前世界冠軍Go選手和現(xiàn)任冠軍。 許多專家預(yù)測,這一成就將再持續(xù)十年。
神經(jīng)網(wǎng)絡(luò)有許多種,但是它們?nèi)绾喂ぷ鞯幕靖拍詈芎唵巍?它們大致基于人腦,由一層或多層“神經(jīng)元”組成,它們只是傳遞來自上一層信號的數(shù)學(xué)運算。 在每一層,對來自上一層神經(jīng)元的輸入進(jìn)行計算,然后將輸出中繼到下一層。 網(wǎng)絡(luò)最后一層的輸出將根據(jù)任務(wù)表示對輸入數(shù)據(jù)的一些預(yù)測。 建立成功的神經(jīng)網(wǎng)絡(luò)所面臨的挑戰(zhàn)是找到適用于每一層的正確計算。
神經(jīng)網(wǎng)絡(luò)可以處理高維數(shù)值和分類數(shù)據(jù),并執(zhí)行諸如回歸,分類,聚類和特征提取之類的任務(wù)。 通過首先基于數(shù)據(jù)和任務(wù)配置其體系結(jié)構(gòu),然后調(diào)整其超參數(shù)以優(yōu)化神經(jīng)網(wǎng)絡(luò)的性能來創(chuàng)建神經(jīng)網(wǎng)絡(luò)。 一旦對神經(jīng)網(wǎng)絡(luò)進(jìn)行了充分的訓(xùn)練和調(diào)整,就可以將其用于處理新的數(shù)據(jù)集并返回合理可靠的預(yù)測。
Eclipse DeepLearning4j適用的地方
Eclipse Deeplearning4j (DL4J)是一個基于JVM的開源工具包,用于構(gòu)建,訓(xùn)練和部署神經(jīng)網(wǎng)絡(luò)。 它旨在為Java和Scala社區(qū)提供服務(wù),并且用戶友好,穩(wěn)定并且與Spark,CUDA和cuDNN等技術(shù)很好地集成在一起。 Deeplearning4j還與Keras和TensorFlow等Python工具集成,以將其模型部署到JVM上的生產(chǎn)環(huán)境。 它還附帶了一組開源庫,Skymind將這些開源庫捆綁在稱為Skymind Intelligence Layer(SKIL)的企業(yè)發(fā)行版中。 這些庫是:
- Deeplearning4j :神經(jīng)網(wǎng)絡(luò)DSL(有助于構(gòu)建與數(shù)據(jù)管道和Spark集成的神經(jīng)網(wǎng)絡(luò))
- ND4J :用于Java的N維數(shù)組,一個張量庫:“具有C代碼和更廣泛范圍的Eclipse January”。 目標(biāo)是為各種硬件平臺提供張量操作和優(yōu)化的支持
- DataVec :ETL庫,可矢量化和“張緊”數(shù)據(jù)。 提取轉(zhuǎn)換負(fù)載,并支持通過一系列數(shù)據(jù)轉(zhuǎn)換連接到各種數(shù)據(jù)源并輸出n維數(shù)組
- libnd4j :用于張量操作的純C ++庫,該庫與開源庫JavaCPP緊密協(xié)作(JavaCPP是由Skymind工程師創(chuàng)建并維護(hù)的,但它不屬于該項目)。
- RL4J :與Deeplearning4j集成的JVM上的強化學(xué)習(xí)。 包括在AlphaGo和A3C中使用的Deep-Q學(xué)習(xí)。
- Jumpy :與Numpy集成的ND4J庫的Python接口
- 仲裁器 :通過超參數(shù)搜索自動調(diào)整神經(jīng)網(wǎng)絡(luò)。 使用網(wǎng)格搜索,隨機搜索和貝葉斯方法進(jìn)行超參數(shù)優(yōu)化。
- ScalNet :Deeplearning4j的Scala API,在外觀上類似于Torch或Keras。
- ND4S :基于ND4J的Scala N維數(shù)組。
這是使用DeepLearning4j的一些原因。
您是該領(lǐng)域的數(shù)據(jù)科學(xué)家,或者是Java,Scala或Python項目的學(xué)生,并且需要與JVM堆棧(Hadoop,Spark,Kafka,ElasticSearch,Cassandra)集成。 例如,您希望通過多GPU在Spark上擴展神經(jīng)網(wǎng)絡(luò)訓(xùn)練。 您需要探索數(shù)據(jù),進(jìn)行和監(jiān)視將各種算法應(yīng)用于數(shù)據(jù)的實驗,并在集群上進(jìn)行訓(xùn)練以快速獲取該數(shù)據(jù)的準(zhǔn)確模型。
您是企業(yè)環(huán)境中的數(shù)據(jù)工程師或軟件開發(fā)人員,需要穩(wěn)定,可重用的數(shù)據(jù)管道以及對數(shù)據(jù)的可伸縮且準(zhǔn)確的預(yù)測。 這里的用例是使用簡單易懂的API以編程方式自動處理和分析數(shù)據(jù),以確定指定結(jié)果。
示例:建立前饋網(wǎng)絡(luò)
前饋網(wǎng)絡(luò)是神經(jīng)網(wǎng)絡(luò)的最簡單形式,也是最早創(chuàng)建的網(wǎng)絡(luò)之一。 在這里,我們將基于使用月亮數(shù)據(jù)的示例概述前饋神經(jīng)網(wǎng)絡(luò)的示例。 數(shù)據(jù)位于此處 。
原始數(shù)據(jù)由具有兩個數(shù)字功能和兩個標(biāo)簽的CSV文件組成。 訓(xùn)練集和測試集位于不同的CSV文件中,訓(xùn)練集中有2000個觀察值,測試集中有1000個觀察值。 該任務(wù)的目的是在給定兩個輸入特征的情況下預(yù)測標(biāo)簽。 因此,我們對分類感興趣。
我們首先初始化構(gòu)建前饋神經(jīng)網(wǎng)絡(luò)所需的變量。 我們設(shè)置了神經(jīng)網(wǎng)絡(luò)的超參數(shù),例如學(xué)習(xí)率和批量大小,以及與它的體系結(jié)構(gòu)相關(guān)的變量,例如隱藏節(jié)點的數(shù)量。
int seed = 123; double learningRate = 0.005; int batchSize = 50; int nEpochs = 100;int numInputs = 2; int numOutputs = 2; int numHiddenNodes = 20;final String filenameTrain = new ClassPathResource("/classification/moon_data_train.csv").getFile().getPath(); final String filenameTest = new ClassPathResource("/classification/moon_data_eval.csv").getFile().getPath();因為數(shù)據(jù)位于兩個CSV文件中,所以我們總共初始化了兩個CSVRecordReaders和兩個DataSetIterators 。 RecordReaders會將數(shù)據(jù)解析為記錄格式,而DataSetIterator會將數(shù)據(jù)以其可以讀取的格式饋入神經(jīng)網(wǎng)絡(luò)。
RecordReader rr = new CSVRecordReader(); rr.initialize(new FileSplit(new File(filenameTrain))); DataSetIterator trainIter = new RecordReaderDataSetIterator(rr,batchSize,0,2);RecordReader rrTest = new CSVRecordReader(); rrTest.initialize(new FileSplit(new File(filenameTest))); DataSetIterator testIter = new RecordReaderDataSetIterator(rrTest,batchSize,0,2);建立前饋網(wǎng)絡(luò)
現(xiàn)在已經(jīng)準(zhǔn)備好數(shù)據(jù),我們可以使用MultiLayerConfiguration設(shè)置神經(jīng)網(wǎng)絡(luò)的配置。
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate).updater(Updater.NESTEROVS).list().layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes).weightInit(WeightInit.XAVIER).activation(Activation.RELU).build()).layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).weightInit(WeightInit.XAVIER).activation(Activation.SOFTMAX).nIn(numHiddenNodes).nOut(numOutputs).build()).pretrain(false).backprop(true).build();使用softmax激活函數(shù)和負(fù)對數(shù)似然損失函數(shù),有一個包含20個節(jié)點的隱藏層和一個具有兩個節(jié)點的輸出層。 我們還設(shè)置了如何初始化神經(jīng)網(wǎng)絡(luò)的權(quán)重以及神經(jīng)網(wǎng)絡(luò)將如何優(yōu)化權(quán)重。 為了使結(jié)果可重復(fù),我們還設(shè)置了種子。 也就是說,我們使用隨機初始化的權(quán)重,但是如果需要稍后從同一點開始訓(xùn)練以確認(rèn)結(jié)果,則可以保存它們的隨機初始化。
訓(xùn)練和評估前饋神經(jīng)網(wǎng)絡(luò)
為了實際創(chuàng)建模型,使用先前設(shè)置的配置初始化MultiLayerNetwork 。 然后,我們可以使用訓(xùn)練循環(huán)擬合數(shù)據(jù); 或者,如果使用MultipleEpochsIterator ,則只需要調(diào)用一次fit函數(shù)即可訓(xùn)練具有設(shè)定時期數(shù)的數(shù)據(jù)。
MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(100)); for ( int n = 0; n < nEpochs; n++) {model.fit( trainIter ); }數(shù)據(jù)完成訓(xùn)練后,我們將使用測試集評估模型。 請注意, testIter根據(jù)先前設(shè)置的批次大小50創(chuàng)建DataSets 。 Evaluation類將使用正確的標(biāo)簽和預(yù)測來計算準(zhǔn)確性。 最后,我們可以打印出結(jié)果。
Evaluation eval = new Evaluation(numOutputs); while(testIter.hasNext()){DataSet t = testIter.next();INDArray features = t.getFeatureMatrix();INDArray labels = t.getLabels();INDArray predicted = model.output(features,false);eval.eval(labels, predicted); }System.out.println(eval.stats());該示例涵蓋了使用MultiLayerNetwork創(chuàng)建簡單的前饋神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。
- 要了解更多信息,請參閱我們的O'Reilly書: 深度學(xué)習(xí):從業(yè)者的方法
- 并查看Deeplearning4j編程指南
翻譯自: https://www.javacodegeeks.com/2017/11/building-simple-neural-network-eclipse-deeplearning4j.html
總結(jié)
以上是生活随笔為你收集整理的使用Eclipse Deeplearning4j构建简单的神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装安卓管家安全吗(安装安卓管家)
- 下一篇: linux服务器同步命令(linux服务