DL框架之Deeplearning4j:深度學習框架Deeplearning4j的簡介、安裝、使用方法之詳細攻略
深度學習框架Deeplearning4j的簡介
? ? ? ?Eclipse Deeplearning4J (DL4J)生態系統是一組旨在支持基于JVM的深度學習應用程序的所有需求的項目。這意味著從原始數據開始,從任何地方和任何格式加載和預處理數據,構建和調整各種各樣的簡單和復雜的深度學習網絡。
? ? ? ?Deeplearning4j是為Java和Java虛擬機編寫的開源深度學習庫,是廣泛支持各種深度學習算法的運算框架。Deeplearning4j可以實施的技術包括受限玻爾茲曼機、深度置信網絡、深度自動編碼器、堆疊式降噪自動編碼器、循環神經張量網絡,以及word2vec、doc2vec和GloVe。這些算法全部包括分布式并行版本,與Hadoop和Spark集成。Skymind是Deeplearning4j的商業支持機構。
? ? ? ?Deeplearning4j是開源項目,主要由位于舊金山的一支機器學習團隊開發,團隊由Adam Gibson領導。Deeplearning4j是谷歌Word2vec頁面上列出的唯一一個在Java環境下實施Word2vec的開源項目。
? ? ? ?Java虛擬機中的科學計算。Deeplearning4j包括使用ND4J的N維數組類,可在Java和Scala中進行科學計算,類似于Numpy為Python提供的功能。其基礎是線性代數庫,可有效支持生產環境中的矩陣操作。
? ? ? ?Deeplearning4j已經用于多項商業和科研應用。其代碼由GitHub托管,并在谷歌小組上設有支持論壇。DL4J 生態系統中的所有項目都支持 Windows、Linux 和 macOS。硬件支持包括 CUDA GPU(10.0、10.1、10.2,OSX 除外)、x86 CPU(x86_64、avx2、avx512)、ARM CPU(arm、arm64、armhf)和 PowerPC(ppc64le)。
GitHub:https://github.com/deeplearning4j
GitHub地址:https://github.com/deeplearning4j/deeplearning4j
官方文檔:Deeplearning4j Suite Overview - Deeplearning4j
1、Deeplearning4j特點
基于JVM語言特性:因為Deeplearning4J運行在JVM上,所以除了Java之外,您還可以將它與各種基于JVM的語言一起使用,比如Scala、Kotlin、Clojure等等。Deeplearning4j基于廣泛使用的編程語言Java——但同時也兼容Clojure,并且包括Scala的API。它由自有的開源數值計算庫ND4J驅動,可使用CPU或GPU運行。
可組合的:這一框架是可組合的,即受限玻爾茲曼機、卷積網絡、自動編碼器、遞歸網絡等淺層神經網絡可以相互疊加,組合成不同類型的深度網絡。
集群式的:Deeplearning4j的定型以集群進行。神經網絡通過迭代化簡平行定型,可以在Hadoop/YARN以及Spark上運行。Deeplearning4j還與Cuda內核集成,進行純GPU操作,可使用分布式GPU運行。
用于機器學習的Canova向量化庫:Canova可將各類文件格式和數據類型向量化,所用的輸入/輸出格式系統近似于Hadoop的MapReduce。Canova目前仍在開發中,設計目標是實現CSV、圖像、聲音、文本和視頻的向量化。Canova可以從命令行使用。 版本0.4.0之后,Canova庫已合并到 DataVec當中。
2、DL4J的幾個模塊
DL4J:用于構建具有各種層(包括自定義層)的多層網絡和計算圖的高級 API。支持從 h5 導入 Keras 模型,包括 tf.keras 模型(截至 1.0.0-beta7),還支持在 Apache Spark 上進行分布式訓練;
ND4J:通用線性代數庫,包含超過 500 種數學、線性代數和深度學習運算。 ND4J 基于高度優化的 C++ 代碼庫 LibND4J,通過 OpenBLAS、OneDNN (MKL-DNN)、cuDNN、cuBLAS 等庫提供 CPU?(AVX2/512) 和 GPU (CUDA) 支持和加速;
SameDiff : 作為ND4J 庫的一部分,SameDiff 是我們的自動微分/深度學習框架。 SameDiff 使用基于圖形(定義然后運行)的方法,類似于 TensorFlow 圖形模式。 Eager graph (TensorFlow 2.x eager/PyTorch) 圖執行計劃。 SameDiff 支持導入 TensorFlow 凍結模型格式 .pb (protobuf) 模型。計劃導入 ONNX、TensorFlow SavedModel 和 Keras 模型。 Deeplearning4j 還具有完整的 SameDiff 支持,可以輕松編寫自定義層和損失函數;
DataVec:用于各種格式和文件(HDFS、Spark、圖像、視頻、音頻、CSV、Excel 等)的機器學習數據的 ETL;
LibND4J:支撐一切的 C++ 庫。有關 JVM 如何訪問本機數組和操作的更多信息,請參閱 JavaCPP;
深度學習框架Deeplearning4j的安裝
git clone https://github.com/eclipse/deeplearning4j
硬件要求
Java(開發者版7或更新版本(僅支持64位版本)
Apache Maven
IntelliJ IDEA(建議)或Eclipse
Git
深度學習框架Deeplearning4j的簡使用方法
1、Deeplearning4J 定義LeNet卷積神經網絡
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.l2(0.0005)
.weightInit(WeightInit.XAVIER)
.updater(new Adam(1e-3))
.list()
.layer(new ConvolutionLayer.Builder(5, 5)
.stride(1,1)
.nOut(20)
.activation(Activation.IDENTITY)
.build())
.layer(new SubsamplingLayer.Builder(PoolingType.MAX)
.kernelSize(2,2)
.stride(2,2)
.build())
.layer(new ConvolutionLayer.Builder(5, 5)
.stride(1,1)
.nOut(50)
.activation(Activation.IDENTITY)
.build())
.layer(new SubsamplingLayer.Builder(PoolingType.MAX)
.kernelSize(2,2)
.stride(2,2)
.build())
.layer(new DenseLayer.Builder().activation(Activation.RELU)
.nOut(500).build())
.layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
.nOut(outputNum)
.activation(Activation.SOFTMAX)
.build())
.setInputType(InputType.convolutionalFlat(28,28,1))
.build();