Deeplearning4j: Dubinsko učenje i ETL za JVM

Eclipse Deeplearning4j je JVM-ova distribuirana biblioteka dubokog učenja s otvorenim izvorom. Deeplearning4j napisan je na Javi i kompatibilan je s bilo kojim JVM jezikom, poput Scale, Clojure ili Kotlina. Temeljni proračuni napisani su na C, C ++ i Cuda. Keras će služiti kao Python API. Integriran s Hadoop i Apache Spark, Deeplearning4j donosi AI u poslovna okruženja za upotrebu na distribuiranim GPU-ima i CPU-ima.

Deeplearning4j zapravo je hrpa projekata namijenjenih podršci svim potrebama JVM-ove aplikacije za duboko učenje. Osim samog Deeplearning4j (API visoke razine), uključuje ND4J (linearna algebra opće namjene,), SameDiff (automatska diferencijacija temeljena na grafu), DataVec (ETL), Arbiter (pretraživanje hiperparametara) i C ++ LibND4J (u osnovi je sve od navedenog). LibND4J zauzvrat poziva standardne knjižnice za podršku CPU-a i GPU-a, kao što su OpenBLAS, OneDNN (MKL-DNN), cuDNN i cuBLAS.

Cilj Eclipse Deeplearning4j je pružiti temeljni skup komponenata za izgradnju aplikacija koje uključuju AI. AI proizvodi u poduzeću često imaju širi opseg od samog strojnog učenja. Opći cilj distribucije je pružiti pametne zadane vrijednosti za izgradnju aplikacija za duboko učenje.

Deeplearning4j se na nekoj razini natječe sa svim ostalim okvirima dubokog učenja. Najoporedljiviji projektni opseg je TensorFlow, koji je vodeći okvir za duboko učenje za proizvodnju. TensorFlow trenutno ima sučelja za Python, C ++ i Java (eksperimentalno) te zasebnu implementaciju za JavaScript. TensorFlow koristi dva načina treninga: grafički zasnovan i neposredni način rada (željno izvršavanje). Deeplearning4j trenutno podržava samo izvršavanje zasnovano na grafu.

PyTorch, vjerojatno vodeći okvir za duboko učenje za istraživanje, podržava samo neposredni način rada; ima sučelja za Python, C ++ i Java. H2O Sparkling Water integrira H2O otvoreni izvor, distribuiranu platformu za strojno učenje u memoriji s Sparkom. H2O ima sučelja za prijenosnike Java i Scala, Python, R i H2O Flow.

Komercijalnu podršku za Deeplearning4j možete kupiti od Konduita, koji također podržava mnoge programere koji rade na projektu.

Kako funkcionira Deeplearning4j

Deeplearning4j zadatke učitavanja podataka i algoritama treninga tretira kao zasebne procese. Podatke učitavate i transformirate pomoću knjižnice DataVec, a modele trenirate pomoću tenzora i knjižnice ND4J.

Unosite podatke putem RecordReadersučelja i prolazite kroz podatke pomoću a RecordReaderDataSetIterator. Možete odabrati DataNormalizationklasu koja će se koristiti kao pretprocesor za vaš DataSetIterator. Koristite ImagePreProcessingScalerfor za slikovne podatke, NormalizerMinMaxScalerako imate ujednačen raspon duž svih dimenzija vaših ulaznih podataka, kao i NormalizerStandardizeza većinu ostalih slučajeva. Ako je potrebno, možete implementirati prilagođenu DataNormalizationklasu.

DataSetobjekti su spremnici za značajke i oznake vaših podataka i čuvaju vrijednosti u nekoliko slučajeva INDArray: jedan za značajke vaših primjera, jedan za oznake i dva dodatna za maskiranje, ako koristite podatke vremenskih serija. U slučaju značajki, INDArraytenzor je veličine Number of Examples x Number of Features. Tipično ćete podatke podijeliti u mini serije za trening; broj primjera u anju INDArrayje dovoljno malen da stane u memoriju, ali dovoljno velik da se dobije dobar gradijent.

Ako pogledate Deeplearning4j kod za definiranje modela, kao što je primjer Java u nastavku, vidjet ćete da je to API visoke razine, sličan Kerasu. Zapravo, planirano Pythonovo sučelje za Deeplearning4j koristit će Keras; trenutno, ako imate Keras model, možete ga uvesti u Deeplearning4j.

Konfiguracija višeslojne konfiguracije =

    novi NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (novi Nesterovs (learningRate, 0.9))

        .popis(

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

            novi OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

        ) .backprop (true) .build ();

MultiLayerNetworkKlasa je najjednostavniji za konfiguraciju mreže API dostupan u Eclipse Deeplearning4j; za DAG strukture koristite ComputationGraphumjesto toga. Imajte na umu da je algoritam optimizacije (SGD u ovom primjeru) naveden odvojeno od programa za nadogradnju (Nesterov u ovom primjeru). Ova vrlo jednostavna neuronska mreža ima jedan gusti sloj s ReLUaktivacijskom funkcijom i jedan izlazni sloj s -log(likelihood)gubitkom i softmaxaktivacijskom funkcijom, a rješava se povratnim širenjem. Složenije mreže također mogu imati GravesLSTM, ConvolutionLayer, EmbeddingLayer, i drugi od dva tuceta podržan vrste slojeva i šesnaest tipova sloj prostor.

Najjednostavniji način treniranja modela je pozivanje .fit()metode na konfiguraciji modela s DataSetIteratorargumentom. Također možete resetirati iterator i pozvati .fit()metodu za onoliko epoha koliko vam treba ili koristiti EarlyStoppingTrainer.

Da biste testirali izvedbu modela, upotrijebite Evaluationklasu da biste vidjeli koliko dobro obučeni model odgovara vašim test podacima, koji ne bi trebali biti isti kao podaci o treningu.

Deeplearning4j pruža mogućnost slušatelja koji vam pomažu vizualno nadzirati performanse vaše mreže, koja će se pozivati ​​nakon obrade svake mini serije. Jedan od najčešće korištenih slušatelja je ScoreIterationListener.

Instaliranje i testiranje Deeplearning4j

Trenutno je najlakši način isprobavanja Deeplearning4j službenim brzim početkom. Potrebna je relativno novija verzija Jave, instalacija Mavena, djelujući Git i kopija IntelliJ IDEA (poželjno) ili Eclipse. Postoji i nekoliko brzih početaka koje su pridonijeli korisnici. Započnite kloniranjem repo-a eclipse / deeplearning4j-examples na svoj stroj pomoću Git ili GitHub Desktop. Zatim instalirajte projekte s Mavenom iz mape dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-primjeri% mvn čista instalacija

[ INFO ] Traženje projekata ...

[ UPOZORENJE ]

[ UPOZORENJE ] Naišli su na neke probleme prilikom izrade učinkovitog modela za org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7

[ UPOZORENJE ] 'build.plugins.plugin. (GroupId: artifactId)' mora biti jedinstven, ali naći duplikat deklaracije dodatka org.apache.maven.plugins: maven-compiler-plugin @ line 250, column 21

[ UPOZORENJE ]

[ UPOZORENJE ] Preporučuje se rješavanje ovih problema jer ugrožavaju stabilnost vaše gradnje.

[ UPOZORENJE ]

[ UPOZORENJE ] Iz tog razloga, buduće verzije Mavena možda više neće podržavati izgradnju takvih neispravnih projekata.

[ UPOZORENJE ]

[ INFO ]

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

[ INFO ] Uvod u zgradu DL4J 1.0.0-beta7

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

Preuzeto sa centralne stranice: //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 na 4,4 kB / s)

Preuzimanje s centrale: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Preuzeto s centrale: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB na 137 kB / s)

Preuzimanje s centrale: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Preuzeto s centrale: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB na 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.