Programiranje

Deeplearning4j: Poglobljeno učenje in ETL za JVM

Eclipse Deeplearning4j je odprtokodna, distribuirana, poglobljena knjižnica za JVM. Deeplearning4j je napisan v Javi in ​​je združljiv s katerim koli jezikom JVM, kot so Scala, Clojure ali Kotlin. Osnovni izračuni so napisani v jeziku C, C ++ in Cuda. Keras bo služil kot API za Python. Integriran s sistemoma Hadoop in Apache Spark, Deeplearning4j prinaša AI v poslovna okolja za uporabo na porazdeljenih GPU-jih in CPU-jih.

Deeplearning4j je pravzaprav kup projektov, namenjenih podpori vsem potrebam aplikacije za globoko učenje, ki temelji na JVM. Poleg samega Deeplearning4j (API na visoki ravni) vključuje ND4J (splošna linearna algebra,), SameDiff (samodejno razlikovanje na osnovi grafa), DataVec (ETL), Arbiter (iskanje po hiperparametrih) in C ++ LibND4J (podpira vse zgoraj). LibND4J v zameno kliče standardne knjižnice za podporo CPU in GPU, kot so OpenBLAS, OneDNN (MKL-DNN), cuDNN in cuBLAS.

Cilj Eclipse Deeplearning4j je zagotoviti osnovni nabor komponent za gradnjo aplikacij ki vključujejo AI. Izdelki umetne inteligence v podjetju imajo pogosto širši obseg kot samo strojno učenje. Splošni cilj distribucije je zagotoviti pametne privzete vrednosti za izdelavo aplikacij za poglobljeno učenje.

Deeplearning4j na neki ravni tekmuje z vsemi drugimi okviri globokega učenja. Najbolj primerljiv projekt po obsegu je TensorFlow, ki je vodilni okvir za globoko učenje za proizvodnjo. TensorFlow ima trenutno vmesnike za Python, C ++ in Java (eksperimentalno) ter ločeno izvedbo za JavaScript. TensorFlow uporablja dva načina treninga: grafični in neposredni način (nestrpno izvajanje). Deeplearning4j trenutno podpira samo izvajanje na osnovi grafa.

PyTorch, verjetno vodilni okvir globokega učenja za raziskave, podpira le takojšen način; ima vmesnike za Python, C ++ in Java. H2O Sparkling Water vključuje H2O odprtokodno distribuirano platformo za strojno učenje v pomnilniku s Spark. H2O ima vmesnike za zvezke Java in Scala, Python, R in H2O Flow.

Komercialno podporo za Deeplearning4j lahko kupite pri Konduitu, ki podpira tudi številne razvijalce, ki delajo na projektu.

Kako deluje Deeplearning4j

Deeplearning4j obravnava naloge nalaganja podatkov in algoritme usposabljanja kot ločene procese. Podatke naložite in preoblikujete s knjižnico DataVec, modele pa trenirate s tenzorji in knjižnico ND4J.

Podatke zaužijete prek RecordReader vmesnik in se po podatkih sprehodite s pomočjo RecordReaderDataSetIterator. Izberete lahko Normalizacija podatkov za uporabo kot predprocesor za vaš DataSetIterator. Uporabi ImagePreProcessingScaler za slikovne podatke, NormalizerMinMaxScaler če imate enak obseg po vseh dimenzijah vhodnih podatkov, in Normalizator Standardiziraj za večino drugih primerov. Če je potrebno, lahko izvedete po meri Normalizacija podatkov razred.

DataSet Predmeti so vsebniki za značilnosti in oznake vaših podatkov in hranijo vrednosti v več primerih INDArray: ena za značilnosti vaših primerov, ena za nalepke in dve dodatni za prikrivanje, če uporabljate podatke o časovnih vrstah. V primeru funkcij, INDArray je tenzor velikosti Število primerov x Število lastnosti. Običajno boste podatke razdelili na mini serije za trening; število primerov v INDArray je dovolj majhen, da se prilega v spomin, vendar dovolj velik, da dobimo dober gradient.

Če pogledate kodo Deeplearning4j za definiranje modelov, kot je primer Java spodaj, boste videli, da gre za API na visoki ravni, podoben Kerasu. Pravzaprav bo načrtovani vmesnik Python za Deeplearning4j uporabljal Keras; zdaj, če imate model Keras, ga lahko uvozite v Deeplearning4j.

Konfiguracija MultiLayerConfiguration =

new NeuralNetConfiguration.Builder ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

.updater (novi Nesterovs (learningRate, 0.9))

.list (

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

nov OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

) .backprop (true) .build ();

The MultiLayerNetwork class je najpreprostejši API za omrežno konfiguracijo, ki je na voljo v programu Eclipse Deeplearning4j; za strukture DAG uporabite ComputationGraph namesto tega. Upoštevajte, da je algoritem za optimizacijo (SGD v tem primeru) podan ločeno od posodabljalnika (Nesterov v tem primeru). Ta zelo preprosta nevronska mreža ima eno gosto plast z ReLU aktivacijsko funkcijo in en izhodni sloj z -log (verjetnost) izguba in a softmax aktivacijsko funkcijo in je rešen s povratnim širjenjem. Lahko imajo tudi bolj zapletena omrežja GravesLSTM, ConvolutionLayer, EmbeddingLayerin drugi od dveh ducatov podprtih tipov slojev in šestnajstih vrst slojev prostora.

Najenostavnejši način treninga modela je poklicanje .fit () v konfiguraciji modela z vašim DataSetIterator kot argument. Prav tako lahko ponastavite iterator in pokličete .fit () za toliko obdobij, kot jih potrebujete, ali uporabite EarlyStoppingTrainer.

Če želite preizkusiti zmogljivost modela, uporabite Vrednotenje razredu, da vidite, kako dobro izurjeni model ustreza vašim testnim podatkom, ki ne smejo biti enaki podatkom o vadbi.

Deeplearning4j ponuja možnost poslušalca, ki vam pomaga vizualno spremljati delovanje vašega omrežja, ki bo poklicano po obdelavi vsake mini serije. Eden najpogosteje uporabljenih poslušalcev je ScoreIterationListener.

Namestitev in testiranje Deeplearning4j

Trenutno je Deeplearning4j najlažje preizkusiti z uporabo uradnega hitrega zagona. Zahteva razmeroma najnovejšo različico Jave, namestitev Mavena, delujočega Gita in kopijo IntelliJ IDEA (prednostno) ali Eclipse. Uporabnikov prispeva tudi nekaj hitrih zagonov. Najprej klonirajte repo eclipse / deeplearning4j-examples v svoj računalnik z namizjem Git ali GitHub. Nato z Mavenom namestite projekte iz mape dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-primeri% mvn čista namestitev

[INFO] Iskanje projektov ...

[OPOZORILO]

[OPOZORILO] Pri gradnji učinkovitega modela za org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7 je prišlo do nekaterih težav

[OPOZORILO] 'build.plugins.plugin. (groupId: artifactId)' mora biti enoličen, vendar najti podvojeno izjavo vtičnika org.apache.maven.plugins: maven-compiler-plugin @ vrstica 250, stolpec 21

[OPOZORILO]

[OPOZORILO] Zelo priporočljivo je odpraviti te težave, ker ogrožajo stabilnost vaše gradnje.

[OPOZORILO]

[OPOZORILO] Iz tega razloga prihodnje različice Maven morda ne bodo več podpirale gradnje takšnih nepravilnih projektov.

[OPOZORILO]

[INFO]

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

[INFO] Uvod v zgradbo DL4J 1.0.0-beta7

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

Preneseno iz centralne: //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 pri 4,4 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Preneseno s centralnega: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB pri 137 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Preneseno s centralnega: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB pri 396 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Preneseno s centralnega: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB pri 283 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Preneseno s centralne strani: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB pri 924 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Preneseno iz centralne: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB pri 430 kB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Preneseno s centralnega: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB pri 1,6 MB / s)

Prenos iz centralne: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[OPOZORILO] - org.agrona.collections.Hashing

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

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

[OPOZORILO] - org.agrona.concurrent.SleepingIdleStrategy

[OPOZORILO] - org.agrona.collections.MutableInteger

[OPOZORILO] - org.agrona.collections.Int2IntHashMap

[OPOZORILO] - org.agrona.collections.IntIntConsumer

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

[OPOZORILO] - 175 več ...

[OPOZORILO] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar opredeli 1 prekrivajoče se razrede:

[OPOZORILO] - modul-info

[OPOZORILO] protobuf-1.0.0-beta7.jar, guava-19.0.jar opredeli 3 prekrivajoče se razrede:

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

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

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

[OPOZORILO] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar opredeli 35 prekrivajočih se razredov:

[OPOZORILO] - javax.annotation.RegEx

[OPOZORILO] - javax.annotation.concurrent.Immutable

[OPOZORILO] - javax.annotation.meta.TypeQualifierDefault

[OPOZORILO] - javax.annotation.meta.TypeQualifier

[OPOZORILO] - javax.annotation.Syntax

[OPOZORILO] - javax.annotation.CheckReturnValue

[OPOZORILO] - javax.annotation.CheckForNull

[OPOZORILO] - javax.annotation.Nonnull

[OPOZORILO] - javax.annotation.meta.TypeQualifierNickname

[OPOZORILO] - javax.annotation.MatchesPattern

[OPOZORILO] - še 25 ...

[OPOZORILO] maven-shadow-plugin je zaznal, da so nekatere datoteke razreda

[OPOZORILO] v dveh ali več JAR-jih. Ko se to zgodi, samo eno

[OPOZORILO] posamezna različica razreda se kopira v uber jar.

[OPOZORILO] Običajno to ni škodljivo in lahko ta opozorila preskočite,

[OPOZORILO] sicer poskusite ročno izključiti artefakte na podlagi

[OPOZORILO] odvisnost mvn: drevo -Ddetail = true in zgornji izhod.

[OPOZORILO] Glej //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Pritrditev osenčenega artefakta.

[INFO]

[INFO] --- maven-install-plugin: 2.4: namestite (privzeto-namestitev) @ dl4j-primeri ---

[INFO] Namestitev /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar na /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0 .0-beta7 / dl4j-primeri-1.0.0-beta7.jar

[INFO] Namestitev /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/pom.xml v /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0 .0-beta7.pom

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

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

[INFO] ZGRADITI USPEH

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

[INFO] Skupni čas: 05:07 min

[INFO] Končano ob: 2020-07-10T10: 58: 55-04: 00

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

martinheller @ Martins-Retina-MacBook dl4j-primeri%

Ko je namestitev končana, odprite imenik dl4j-examples / z IntelliJ IDEA in poskusite zagnati nekaj primerov.

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