Programmering

Deeplearning4j: Deep learning og ETL for JVM

Eclipse Deeplearning4j er et open source, distribuert, deep learning-bibliotek for JVM. Deeplearning4j er skrevet på Java og er kompatibel med alle JVM-språk, som Scala, Clojure eller Kotlin. De underliggende beregningene er skrevet i C, C ++ og Cuda. Keras vil fungere som Python API. Integrert med Hadoop og Apache Spark, bringer Deeplearning4j AI til forretningsmiljøer for bruk på distribuerte GPUer og CPUer.

Deeplearning4j er faktisk en bunke med prosjekter beregnet på å støtte alle behovene til en JVM-basert dyplæringsapplikasjon. Utover selve Deeplearning4j (APIet på høyt nivå) inkluderer det ND4J (generell lineær algebra,), SameDiff (grafbasert automatisk differensiering), DataVec (ETL), Arbiter (hyperparametersøk) og C ++ LibND4J (understøtter alle av ovennevnte). LibND4J kaller i sin tur standardbiblioteker for CPU- og GPU-støtte, som OpenBLAS, OneDNN (MKL-DNN), cuDNN og cuBLAS.

Målet med Eclipse Deeplearning4j er å tilby et kjernesett av komponenter for bygging applikasjoner som inkluderer AI. AI-produkter i en bedrift har ofte et bredere omfang enn bare maskinlæring. Det overordnede målet for distribusjonen er å gi smarte standarder for å bygge dyp læringsapplikasjoner.

Deeplearning4j konkurrerer, på et eller annet nivå, med alle andre rammer for dyp læring. Det mest sammenlignbare prosjektet i omfanget er TensorFlow, som er det ledende rammeverket for dyplæring for produksjon. TensorFlow har for øyeblikket grensesnitt for Python, C ++ og Java (eksperimentell), og en separat implementering for JavaScript. TensorFlow bruker to måter å trene på: grafbasert og umiddelbar modus (ivrig utførelse). Deeplearning4j støtter for øyeblikket bare grafbasert kjøring.

PyTorch, sannsynligvis det ledende rammeverket for dyp læring for forskning, støtter bare umiddelbar modus; den har grensesnitt for Python, C ++ og Java. H2O Sparkling Water integrerer H2O open source, distribuert maskinlæringsplattform i minne med Spark. H2O har grensesnitt for Java- og Scala-, Python-, R- og H2O Flow-notatbøker.

Kommersiell støtte for Deeplearning4j kan kjøpes fra Konduit, som også støtter mange av utviklerne som jobber med prosjektet.

Hvordan Deeplearning4j fungerer

Deeplearning4j behandler oppgavene for å laste inn data og treningsalgoritmer som separate prosesser. Du laster inn og transformerer dataene ved hjelp av DataVec-biblioteket, og trener modeller ved hjelp av tensorer og ND4J-biblioteket.

Du setter inn data gjennom en RecordReader grensesnitt, og gå gjennom dataene ved hjelp av en RecordReaderDataSetIterator. Du kan velge en Data Normalisering klasse å bruke som forprosessor for din DataSetIterator. Bruke ImagePreProcessingScaler for bildedata, NormalizerMinMaxScaler hvis du har et jevnt område langs alle dimensjoner av inndataene dine, og Normaliser Standardiser for de fleste andre tilfeller. Om nødvendig kan du implementere en tilpasset Data Normalisering klasse.

Datasett objekter er beholdere for funksjonene og etikettene til dataene dine, og beholder verdiene i flere tilfeller av INDArray: en for funksjonene i eksemplene dine, en for etikettene og to ekstra for maskering, hvis du bruker tidsseriedata. Når det gjelder funksjonene, er INDArray er en tensor av størrelsen Antall eksempler x Antall funksjoner. Vanligvis vil du dele dataene i minibatcher for trening; antall eksempler i en INDArray er liten nok til å passe i minnet, men stor nok til å få en god gradient.

Hvis du ser på Deeplearning4j-koden for å definere modeller, for eksempel Java-eksemplet nedenfor, ser du at det er et veldig høyt nivå API, som ligner på Keras. Faktisk vil det planlagte Python-grensesnittet til Deeplearning4j bruke Keras; akkurat nå, hvis du har en Keras-modell, 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 (),

ny OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

) .backprop (true) .build ();

De MultiLayerNetwork klasse er den enkleste nettverkskonfigurasjons API tilgjengelig i Eclipse Deeplearning4j; for DAG-strukturer, bruk Beregningsgraf i stedet. Merk at optimaliseringsalgoritmen (SGD i dette eksemplet) er spesifisert separat fra oppdateringsprogrammet (Nesterov i dette eksemplet). Dette veldig enkle nevrale nettverket har et tett lag med en ReLU aktiveringsfunksjon og ett utgangslag med -log (sannsynlighet) tap og a softmax aktiveringsfunksjon, og løses ved forplantning av ryggen. Mer komplekse nettverk kan også ha GravesLSTM, ConvolutionLayer, EmbeddingLayer, og andre av de to dusin støttede lagtyper og seksten lagromtyper.

Den enkleste måten å trene modellen på er å ringe .passe() metoden på modellkonfigurasjonen med din DataSetIterator som argument. Du kan også tilbakestille iteratoren og ringe .passe() metode for så mange epoker som du trenger, eller bruk en EarlyStoppingTrainer.

For å teste modellens ytelse, bruk en Evaluering klasse for å se hvor godt den trente modellen passer til testdataene dine, som ikke skal være det samme som treningsdataene.

Deeplearning4j gir deg en lytterfasilitet som hjelper deg å overvåke nettverkets ytelse visuelt, som vil bli ringt opp etter at hver minibatch er behandlet. En av de mest brukte lytterne er ScoreIterationListener.

Installere og teste Deeplearning4j

For øyeblikket er den enkleste måten å prøve Deeplearning4j på ved å bruke den offisielle hurtigstarten. Det krever en relativt fersk versjon av Java, en installasjon av Maven, en fungerende Git og en kopi av IntelliJ IDEA (foretrukket) eller Eclipse. Det er også noen få hurtigbaserte starter. Start med å klone eclipse / deeplearning4j-eksemplene repo til din egen maskin med Git eller GitHub Desktop. Installer deretter prosjektene med Maven fra mappen dl4j-eksempler.

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

[INFO] Skanner etter prosjekter ...

[ADVARSEL]

[ADVARSEL] Noen problemer oppstod under bygging av en effektiv modell for org.deeplearning4j: dl4j-eksempler: jar: 1.0.0-beta7

[ADVARSEL] 'build.plugins.plugin. (groupId: artifactId)' må være unik, men fant duplikatdeklarasjon av plugin org.apache.maven.plugins: maven-compiler-plugin @ linje 250, kolonne 21

[ADVARSEL]

[ADVARSEL] Det anbefales sterkt å fikse disse problemene fordi de truer stabiliteten i bygningen din.

[ADVARSEL]

[ADVARSEL] Av denne grunn kan fremtidige Maven-versjoner ikke lenger støtte bygging av slike misdannede prosjekter.

[ADVARSEL]

[INFO]

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

[INFO] Byggintroduksjon til DL4J 1.0.0-beta7

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

Lastet ned fra sentralt: //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)

Nedlasting fra sentralt: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

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

Nedlasting fra sentralt: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Lastet ned fra sentralt: //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)

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

Lastet ned fra sentralt: //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)

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

Lastet ned fra sentralt: //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)

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

Lastet ned fra sentralt: //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)

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

Lastet ned fra sentralt: //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)

Nedlasting fra sentralt: //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 flere ...

[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 flere ...

[ADVARSEL] maven-shade-plugin har oppdaget at noen klassefiler er

[ADVARSEL] til stede i to eller flere JAR. Når dette skjer, bare en

[ADVARSEL] enkeltversjonen av klassen kopieres til uber jar.

[ADVARSEL] Vanligvis er dette ikke skadelig, og du kan hoppe over disse advarslene,

[ADVARSEL] ellers prøv å ekskludere gjenstander manuelt basert på

[ADVARSEL] mvn avhengighet: treet -Detail = true og ovennevnte utdata.

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

[INFO] Feste skyggelagt gjenstand.

[INFO]

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

[INFO] Installere /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] Installere /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/pom.xml til /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0 .0-beta7.pom

[INFO] Installere /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 SUKSESS

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

[INFO] Total tid: 05:07 min

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

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

martinheller @ Martins-Retina-MacBook dl4j-eksempler%

Når installasjonen er fullført, åpner du dl4j-eksemplene / katalogen med IntelliJ IDEA og prøver å kjøre noen av eksemplene.

$config[zx-auto] not found$config[zx-overlay] not found