Deeplearning4j : JVM을위한 딥 러닝 및 ETL

Eclipse Deeplearning4j는 JVM 용 오픈 소스 분산 딥 러닝 라이브러리입니다. Deeplearning4j는 Java로 작성되었으며 Scala, Clojure 또는 Kotlin과 같은 모든 JVM 언어와 호환됩니다. 기본 계산은 C, C ++ 및 Cuda로 작성됩니다. Keras는 Python API 역할을합니다. Hadoop 및 Apache Spark와 통합 된 Deeplearning4j는 분산 GPU 및 CPU에서 사용할 수 있도록 AI를 비즈니스 환경에 제공합니다.

Deeplearning4j는 실제로 JVM 기반 딥 러닝 애플리케이션의 모든 요구 사항을 지원하기위한 프로젝트 스택입니다. Deeplearning4j 자체 (고급 API) 외에도 ND4J (범용 선형 대수), SameDiff (그래프 기반 자동 미분), DataVec (ETL), Arbiter (초 매개 변수 검색) 및 C ++ LibND4J (모두를 뒷받침하는 위의). LibND4J는 OpenBLAS, OneDNN (MKL-DNN), cuDNN 및 cuBLAS와 같은 CPU 및 GPU 지원을위한 표준 라이브러리를 차례로 호출합니다.

Eclipse Deeplearning4j의 목표 는 AI를 통합하는 애플리케이션 을 빌드하기위한 핵심 구성 요소 세트를 제공하는 것 입니다. 기업 내 AI 제품은 기계 학습보다 더 넓은 범위를 갖는 경우가 많습니다. 배포의 전반적인 목표는 딥 러닝 애플리케이션을 구축하기위한 스마트 기본값을 제공하는 것입니다.

Deeplearning4j는 어떤 수준에서 다른 모든 딥 러닝 프레임 워크와 경쟁합니다. 범위에서 가장 유사한 프로젝트는 프로덕션을위한 선도적 인 엔드 투 엔드 딥 러닝 프레임 워크 인 TensorFlow입니다. TensorFlow에는 현재 Python, C ++ 및 Java (실험적) 용 인터페이스와 JavaScript 용 별도 구현이 있습니다. TensorFlow는 그래프 기반 및 즉시 모드 (즉시 실행)의 두 가지 학습 방법을 사용합니다. Deeplearning4j는 현재 그래프 기반 실행 만 지원합니다.

연구를위한 선도적 인 딥 러닝 프레임 워크 인 PyTorch는 즉시 모드 만 지원합니다. Python, C ++ 및 Java 용 인터페이스가 있습니다. H2O Sparkling Water는 H2O 오픈 소스, 분산 인 메모리 머신 러닝 플랫폼을 Spark와 통합합니다. H2O에는 Java 및 Scala, Python, R 및 H2O Flow 노트북 용 인터페이스가 있습니다.

Deeplearning4j에 대한 상업적 지원은 Konduit에서 구매할 수 있으며 프로젝트에서 작업하는 많은 개발자도 지원합니다.

Deeplearning4j의 작동 원리

Deeplearning4j는 데이터로드 및 학습 알고리즘 작업을 별도의 프로세스로 취급합니다. DataVec 라이브러리를 사용하여 데이터를로드 및 변환하고 텐서 및 ND4J 라이브러리를 사용하여 모델을 학습시킵니다.

RecordReader인터페이스를 통해 데이터를 수집 하고 RecordReaderDataSetIterator. DataNormalization.NET Framework의 전처리기로 사용할 클래스를 선택할 수 있습니다 DataSetIterator. 를 사용 ImagePreProcessingScaler, 이미지 데이터에 대한 NormalizerMinMaxScaler당신의 입력 데이터의 모든 차원을 따라 균일 한 범위를 가지고 있고, NormalizerStandardize다른 대부분의 경우에. 필요한 경우 사용자 정의 DataNormalization클래스를 구현할 수 있습니다 .

DataSet객체는 데이터의 기능 및 레이블에 대한 컨테이너 INDArray이며 시계열 데이터를 사용하는 경우 예제의 기능에 대한 하나, 레이블에 대한 하나, 마스킹에 대한 두 개의 추가 인스턴스 등의 여러 인스턴스에 값을 유지합니다 . 기능 INDArray의 경우 크기의 텐서입니다 Number of Examples x Number of Features. 일반적으로 훈련을 위해 데이터를 미니 배치로 나눕니다. 의 예제 수는 INDArray메모리에 맞을만큼 작지만 좋은 그라디언트를 얻을 수있을만큼 큽니다.

아래 Java 예제와 같이 모델을 정의하기위한 Deeplearning4j 코드를 살펴보면 Keras와 유사한 매우 높은 수준의 API임을 알 수 있습니다. 실제로 계획된 Deeplearning4j의 Python 인터페이스는 Keras를 사용합니다. 지금 Keras 모델이있는 경우 Deeplearning4j로 가져올 수 있습니다.

MultiLayerConfiguration 구성 =

    새로운 NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (new Nesterovs (learningRate, 0.9))

        .명부(

            new DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes) .activation ( "relu"). build (),

            새로운 OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

                  activation ( "softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

        ) .backprop (true) .build ();

MultiLayerNetwork클래스는 Eclipse Deeplearning4j에서 사용할 수있는 가장 간단한 네트워크 구성 API입니다. DAG 구조의 경우 ComputationGraph대신 사용하십시오 . 최적화 알고리즘 (이 예에서는 SGD)이 업데이트 프로그램 (이 예에서는 Nesterov)과 별도로 지정됩니다. 이 매우 간단한 신경망은 ReLU활성화 함수 가있는 하나의 조밀 한 계층과 -log(likelihood)손실 및 softmax활성화 함수가 있는 하나의 출력 계층을 가지고 있으며 역전 파로 해결됩니다. 더 복잡한 네트워크도있을 수 있습니다 GravesLSTM, ConvolutionLayer, EmbeddingLayer, 두 다스 지원 레이어 유형의 다른 사람과 여섯 개 레이어 공간 유형과.

모델을 학습시키는 가장 간단한 방법 은 인수로 .fit()모델 구성 에서 메서드 를 호출하는 것입니다 DataSetIterator. 반복기를 재설정하고 .fit()필요한만큼의 Epoch에 대해 메서드를 호출 하거나 EarlyStoppingTrainer.

모델 성능을 테스트하려면 Evaluation클래스를 사용 하여 학습 된 모델이 학습 데이터와 동일하지 않아야하는 테스트 데이터에 얼마나 잘 맞는지 확인합니다.

Deeplearning4j는 네트워크 성능을 시각적으로 모니터링하는 데 도움이되는 리스너 기능을 제공하며, 각 미니 배치가 처리 된 후 호출됩니다. 가장 자주 사용되는 청취자 중 하나는 ScoreIterationListener.

Deeplearning4j 설치 및 테스트

현재 Deeplearning4j를 사용하는 가장 쉬운 방법은 공식 빠른 시작을 사용하는 것입니다. 비교적 최신 버전의 Java, Maven 설치, 작동중인 Git 및 IntelliJ IDEA (권장) 또는 Eclipse 사본이 필요합니다. 사용자가 제공 한 몇 가지 빠른 시작도 있습니다. eclipse / deeplearning4j-examples 저장소를 Git 또는 GitHub Desktop을 사용하여 자신의 머신에 복제하여 시작합니다. 그런 다음 dl4j-examples 폴더에서 Maven으로 프로젝트를 설치합니다.

martinheller @ Martins-Retina-MacBook dl4j-examples % mvn clean install

[ 정보 ] 프로젝트 검색 중 ...

[ 경고 ]

[ 경고 ] org.deeplearning4j : dl4j-examples : jar : 1.0.0-beta7의 효과적인 모델을 빌드하는 동안 몇 가지 문제가 발생했습니다.

[ 경고 ] 'build.plugins.plugin. (groupId : artifactId)'는 고유해야하지만 플러그인 org.apache.maven.plugins : maven-compiler-plugin @ 행 250, 열 21의 중복 선언이 발견되었습니다.

[ 경고 ]

[ 경고 ] 이러한 문제는 빌드의 안정성을 위협하기 때문에 수정하는 것이 좋습니다.

[ 경고 ]

[ 경고 ] 이러한 이유로 향후 Maven 버전에서는 이러한 잘못된 프로젝트 빌드를 더 이상 지원하지 않을 수 있습니다.

[ 경고 ]

[ 정보 ]

[ 정보 ] ------------------ < org.deeplearning4j : dl4j-examples > ------------------

[ 정보 ] DL4J 1.0.0-beta7 소개 구축

[INFO] --------------------------------[ jar ]---------------------------------

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.pom (6.5 kB at 4.4 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB at 137 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB at 396 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Downloaded from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB at 283 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Downloaded from central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB at 924 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Downloaded from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB at 430 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Downloaded from central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB at 1.6 MB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[WARNING]   - org.agrona.collections.Hashing

[WARNING]   - org.agrona.collections.Long2ObjectCache$ValueIterator

[WARNING]   - org.agrona.collections.Int2ObjectHashMap$EntrySet

[WARNING]   - org.agrona.concurrent.SleepingIdleStrategy

[WARNING]   - org.agrona.collections.MutableInteger

[WARNING]   - org.agrona.collections.Int2IntHashMap

[WARNING]   - org.agrona.collections.IntIntConsumer

[WARNING]   - org.agrona.concurrent.status.StatusIndicator

[WARNING]   - 175 more...

[WARNING] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar define 1 overlapping classes:

[WARNING]   - module-info

[WARNING] protobuf-1.0.0-beta7.jar, guava-19.0.jar define 3 overlapping classes:

[WARNING]   - com.google.thirdparty.publicsuffix.TrieParser

[WARNING]   - com.google.thirdparty.publicsuffix.PublicSuffixPatterns

[WARNING]   - com.google.thirdparty.publicsuffix.PublicSuffixType

[WARNING] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar define 35 overlapping classes:

[WARNING]   - javax.annotation.RegEx

[WARNING]   - javax.annotation.concurrent.Immutable

[WARNING]   - javax.annotation.meta.TypeQualifierDefault

[WARNING]   - javax.annotation.meta.TypeQualifier

[WARNING]   - javax.annotation.Syntax

[WARNING]   - javax.annotation.CheckReturnValue

[WARNING]   - javax.annotation.CheckForNull

[WARNING]   - javax.annotation.Nonnull

[WARNING]   - javax.annotation.meta.TypeQualifierNickname

[WARNING]   - javax.annotation.MatchesPattern

[WARNING]   - 25 more...

[WARNING] maven-shade-plugin has detected that some class files are

[WARNING] present in two or more JARs. When this happens, only one

[WARNING] single version of the class is copied to the uber jar.

[WARNING] Usually this is not harmful and you can skip these warnings,

[WARNING] otherwise try to manually exclude artifacts based on

[WARNING] mvn dependency:tree -Ddetail=true and the above output.

[WARNING] See //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Attaching shaded artifact.

[INFO]

[INFO] --- maven-install-plugin:2.4:install (default-install) @ dl4j-examples ---

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7.jar

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/pom.xml to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7.pom

[INFO] Installing /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7-shaded.jar to /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0.0-beta7-shaded.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  05:07 min

[INFO] Finished at: 2020-07-10T10:58:55-04:00

[INFO] ------------------------------------------------------------------------

[email protected] dl4j-examples %

Once the installation is complete, open the dl4j-examples/ directory with IntelliJ IDEA and try running some of the examples.