Programmering

Deeplearning4j: Deep learning og ETL til JVM

Eclipse Deeplearning4j er et open source, distribueret, dyb læringsbibliotek til JVM. Deeplearning4j er skrevet på Java og er kompatibel med ethvert JVM-sprog, såsom Scala, Clojure eller Kotlin. De underliggende beregninger er skrevet i C, C ++ og Cuda. Keras fungerer som Python API. Integreret med Hadoop og Apache Spark bringer Deeplearning4j AI til forretningsmiljøer til brug på distribuerede GPU'er og CPU'er.

Deeplearning4j er faktisk en stak af projekter beregnet til at understøtte alle behovene i en JVM-baseret dyb læringsapplikation. Ud over selve Deeplearning4j (API'en på højt niveau) inkluderer det ND4J (generel lineær algebra), SameDiff (grafbaseret automatisk differentiering), DataVec (ETL), Arbiter (hyperparametersøgning) og C ++ LibND4J (understøtter alle af ovenstående). LibND4J kalder til gengæld standardbiblioteker til CPU- og GPU-understøttelse, såsom OpenBLAS, OneDNN (MKL-DNN), cuDNN og cuBLAS.

Målet med Eclipse Deeplearning4j er at tilvejebringe et kernesæt af komponenter til bygning applikationer der inkorporerer AI. AI-produkter inden for en virksomhed har ofte et bredere anvendelsesområde end kun maskinindlæring. Det overordnede mål med distributionen er at levere smarte standarder til opbygning af dyb læringsapplikationer.

Deeplearning4j konkurrerer på et eller andet niveau med alle andre dybe læringsrammer. Det mest sammenlignelige projekt i omfang er TensorFlow, som er den førende ende-til-ende dyb læringsramme for produktion. TensorFlow har i øjeblikket grænseflader til Python, C ++ og Java (eksperimentel) og en separat implementering til JavaScript. TensorFlow bruger to måder at træne på: grafbaseret og øjeblikkelig tilstand (ivrig udførelse). Deeplearning4j understøtter i øjeblikket kun grafbaseret udførelse.

PyTorch, sandsynligvis den førende dyb læringsramme for forskning, understøtter kun øjeblikkelig tilstand; det har grænseflader til Python, C ++ og Java. H2O Sparkling Water integrerer H2O open source, distribueret maskinindlæringsplatform i hukommelse med Spark. H2O har grænseflader til Java og Scala, Python, R og H2O Flow notebooks.

Kommerciel support til Deeplearning4j kan købes fra Konduit, som også understøtter mange af de udviklere, der arbejder på projektet.

Sådan fungerer Deeplearning4j

Deeplearning4j behandler opgaverne med at indlæse data og træningsalgoritmer som separate processer. Du indlæser og transformerer dataene ved hjælp af DataVec-biblioteket og træner modeller ved hjælp af tensorer og ND4J-biblioteket.

Du indtager data gennem en RecordReader interface, og gå gennem dataene ved hjælp af en RecordReaderDataSetIterator. Du kan vælge en DataNormalisering klasse til brug som forbehandling til din DataSetIterator. Brug ImagePreProcessingScaler for billeddata, NormalizerMinMaxScaler hvis du har et ensartet interval langs alle dimensioner af dine inputdata, og Normaliser Standardiser i de fleste andre tilfælde. Om nødvendigt kan du implementere en brugerdefineret Data Normalisering klasse.

Datasæt objekter er containere til funktionerne og etiketterne på dine data og opbevarer værdierne i flere tilfælde af INDArray: en til funktionerne i dine eksempler, en til etiketterne og yderligere to til maskering, hvis du bruger tidsseriedata. I tilfælde af funktionerne er INDArray er en tensor af størrelsen Antal eksempler x Antal funktioner. Normalt deler du dataene i minibatcher til træning; antallet af eksempler i en INDArray er lille nok til at passe i hukommelsen, men stor nok til at få en god gradient.

Hvis du ser på Deeplearning4j-koden til definition af modeller, som f.eks. Java-eksemplet nedenfor, ser du, at det er et meget højt API, der ligner Keras. Faktisk vil den planlagte Python-grænseflade til Deeplearning4j bruge Keras; lige nu, hvis du har en Keras-model, kan du importere den til Deeplearning4j.

MultiLayerConfiguration conf =

ny NeuralNetConfiguration.Builder ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

.updater (nye Nesterovs (learningRate, 0.9))

.liste(

ny DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes). aktivering ("relu"). build (),

nyt OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

) .backprop (true) .build ();

Det MultiLayerNetwork klasse er den enkleste netværkskonfigurations-API, der er tilgængelig i Eclipse Deeplearning4j; Brug DAG-strukturer til Beregningsgraf i stedet. Bemærk, at optimeringsalgoritmen (SGD i dette eksempel) er specificeret separat fra opdateringen (Nesterov i dette eksempel). Dette meget enkle neurale netværk har et tæt lag med en ReLU aktiveringsfunktion og et outputlag med -log (sandsynlighed) tab og en softmax aktiveringsfunktion og løses ved tilbagespredning. Mere komplekse netværk kan også have GravesLSTM, ConvolutionLayer, Indlejring af lagog andre af de to dusin understøttede lagtyper og seksten lagrumtyper.

Den enkleste måde at træne modellen på er at ringe til .passe() metode på modelkonfigurationen med din DataSetIterator som et argument. Du kan også nulstille iteratoren og ringe til .passe() metode til så mange epoker som du har brug for, eller brug en EarlyStoppingTrainer.

Brug en til at teste modelydelse Evaluering klasse for at se, hvor godt den uddannede model passer til dine testdata, hvilket ikke skal være det samme som træningsdataene.

Deeplearning4j giver en lytterfacilitet, der hjælper dig med at overvåge dit netværks ydeevne visuelt, som kaldes op efter hver mini-batch er behandlet. En af de mest anvendte lyttere er ScoreIterationListener.

Installation og test af Deeplearning4j

I øjeblikket er den nemmeste måde at prøve Deeplearning4j på ved hjælp af den officielle hurtigstart. Det kræver en relativt ny version af Java, en installation af Maven, en fungerende Git og en kopi af IntelliJ IDEA (foretrukket) eller Eclipse. Der er også et par hurtige starter fra brugerne. Start med at klone eclipse / deeplearning4j-eksemplerne repo til din egen maskine med Git eller GitHub Desktop. Installer derefter projekterne med Maven fra mappen dl4j-eksempler.

martinheller @ Martins-Retina-MacBook dl4j-eksempler% mvn ren installation

[INFO] Scanning efter projekter ...

[ADVARSEL]

[ADVARSEL] Der opstod nogle problemer under opbygningen af ​​den effektive model til org.deeplearning4j: dl4j-eksempler: jar: 1.0.0-beta7

[ADVARSEL] 'build.plugins.plugin. (groupId: artifactId)' skal være entydig, men fundet duplikaterklæring af plugin org.apache.maven.plugins: maven-compiler-plugin @ line 250, kolonne 21

[ADVARSEL]

[ADVARSEL] Det anbefales stærkt at løse disse problemer, fordi de truer stabiliteten i din build.

[ADVARSEL]

[ADVARSEL] Af denne grund understøtter fremtidige Maven-versioner muligvis ikke længere opbygning af sådanne misdannede projekter.

[ADVARSEL]

[INFO]

[INFO] ------------------< org.deeplearning4j: dl4j-eksempler >------------------

[INFO] Bygning Introduktion til DL4J 1.0.0-beta7

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

Downloadet fra 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 ved 4,4 kB / s)

Download fra central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Downloadet fra central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB ved 137 kB / s)

Download fra centralt: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Downloadet fra 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 ved 396 kB / s)

Download fra centralt: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Downloadet fra central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB ved 283 kB / s)

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

Downloadet fra det centrale: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB ved 924 kB / s)

Download fra centralt: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Downloadet fra det centrale: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB ved 430 kB / s)

Downloader fra centralt: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Downloadet fra centralt: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB ved 1,6 MB / s)

Download fra central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[ADVARSEL] - org.agrona.collections.Hashing

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

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

[ADVARSEL] - org.agrona.concurrent.SleepingIdleStrategy

[ADVARSEL] - org.agrona.collections.MutableInteger

[ADVARSEL] - org.agrona.collections.Int2IntHashMap

[ADVARSEL] - org.agrona.collections.IntIntConsumer

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

[ADVARSEL] - 175 mere ...

[ADVARSEL] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar definerer 1 overlappende klasser:

[ADVARSEL] - modul-info

[ADVARSEL] protobuf-1.0.0-beta7.jar, guava-19.0.jar definerer 3 overlappende klasser:

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

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

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

[ADVARSEL] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar definerer 35 overlappende klasser:

[ADVARSEL] - javax.annotation.RegEx

[ADVARSEL] - javax.annotation.concurrent.Immutable

[ADVARSEL] - javax.annotation.meta.TypeQualifierDefault

[ADVARSEL] - javax.annotation.meta.TypeQualifier

[ADVARSEL] - javax.annotation.Syntax

[ADVARSEL] - javax.annotation.CheckReturnValue

[ADVARSEL] - javax.annotation.CheckForNull

[ADVARSEL] - javax.annotation.Nonnull

[ADVARSEL] - javax.annotation.meta.TypeQualifierNickname

[ADVARSEL] - javax.annotation.MatchesPattern

[ADVARSEL] - 25 mere ...

[ADVARSEL] maven-shade-plugin har registreret, at nogle klassefiler er

[ADVARSEL] til stede i to eller flere JAR'er. Når dette sker, kun en

[ADVARSEL] enkeltversion af klassen kopieres til uber jar.

[ADVARSELDette er normalt ikke skadeligt, og du kan springe disse advarsler over,

[ADVARSEL] prøv ellers at manuelt ekskludere artefakter baseret på

[ADVARSEL] mvn afhængighed: træ -Detail = sand og ovenstående output.

[ADVARSEL] Se //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Vedhæftning af skyggefuld artefakt.

[INFO]

[INFO] --- maven-install-plugin: 2.4: installer (standardinstallation) @ dl4j-eksempler ---

[INFO] Installation /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar til /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0 .0-beta7 / dl4j-eksempler-1.0.0-beta7.jar

[INFO] Installation /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] Installation /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7-shaded.jar til /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples /1.0.0-beta7/dl4j-examples-1.0.0-beta7-shaded.jar

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

[INFO] BYGG SUCCES

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

[INFO] Samlet tid: 05:07 min

[INFO] Færdig kl .: 2020-07-10T10: 58: 55-04: 00

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

martinheller @ Martins-Retina-MacBook dl4j-eksempler%

Når installationen er færdig, skal du åbne dl4j-eksemplerne / kataloget med IntelliJ IDEA og prøve at køre nogle af eksemplerne.