Programovanie

Deeplearning4j: Hlboké učenie a ETL pre JVM

Eclipse Deeplearning4j je open source, distribuovaná, hlboko sa učiaca knižnica pre JVM. Deeplearning4j je napísaný v jazyku Java a je kompatibilný s akýmkoľvek jazykom JVM, ako je Scala, Clojure alebo Kotlin. Základné výpočty sú napísané v jazykoch C, C ++ a Cuda. Keras bude slúžiť ako Python API. Vďaka integrácii s Hadoop a Apache Spark prináša Deeplearning4j AI do podnikových prostredí na použitie na distribuovaných GPU a CPU.

Deeplearning4j je v skutočnosti skupina projektov zameraných na podporu všetkých potrieb aplikácie hlbokého učenia založenej na JVM. Okrem samotného Deeplearning4j (API na vysokej úrovni) obsahuje ND4J (univerzálna lineárna algebra,), SameDiff (automatická diferenciácia na základe grafov), DataVec (ETL), Arbiter (hľadanie hyperparametra) a C ++ LibND4J (podporuje všetky z vyššie uvedeného). LibND4J zasa volá štandardné knižnice pre podporu CPU a GPU, ako sú OpenBLAS, OneDNN (MKL-DNN), cuDNN a cuBLAS.

Cieľom Eclipse Deeplearning4j je poskytnúť základnú sadu komponentov pre stavbu aplikácie ktoré obsahujú AI. Produkty AI v rámci podniku majú často širší rozsah ako iba strojové učenie. Celkovým cieľom distribúcie je poskytnúť inteligentné predvolené hodnoty pre vytváranie aplikácií hlbokého učenia.

Deeplearning4j súťaží na určitej úrovni s každým ďalším rámcom hlbokého učenia. Naj porovnateľnejším projektom v rozsahu je TensorFlow, ktorý je popredným end-to-end framework pre hlboké vzdelávanie pre produkciu. TensorFlow má momentálne rozhrania pre Python, C ++ a Java (experimentálne) a samostatnú implementáciu pre JavaScript. TensorFlow používa dva spôsoby tréningu: grafický a okamžitý režim (dychtivé prevedenie). Deeplearning4j momentálne podporuje iba vykonávanie na základe grafov.

PyTorch, pravdepodobne vedúci rámec hlbokého učenia pre výskum, podporuje iba okamžitý režim; má rozhrania pre Python, C ++ a Java. H2O Sparkling Water integruje H2O open source, distribuovanú platformu strojového učenia v pamäti so Sparkom. H2O má rozhrania pre notebooky Java a Scala, Python, R a H2O Flow.

Komerčnú podporu pre Deeplearning4j je možné zakúpiť od spoločnosti Konduit, ktorá tiež podporuje mnohých vývojárov pracujúcich na projekte.

Ako funguje Deeplearning4j

Deeplearning4j zaobchádza s úlohami načítania údajov a tréningových algoritmov ako so samostatnými procesmi. Údaje načítate a transformujete pomocou knižnice DataVec a trénujete modely pomocou tenzorov a knižnice ND4J.

Údaje prijímate prostredníctvom a RecordReader rozhranie a prechádzať údajmi pomocou a RecordReaderDataSetIterator. Môžete si zvoliť a Normalizácia údajov triedy, ktorá sa použije ako preprocesor pre váš DataSetIterator. Použi ImagePreProcessingScaler pre obrazové údaje sa použije NormalizerMinMaxScaler - ak máte jednotný rozsah vo všetkých rozmeroch vstupných údajov a - Normalizátor Štandardizovať pre väčšinu ostatných prípadov. V prípade potreby môžete implementovať zvyk Normalizácia údajov trieda.

Množina údajov objekty sú kontajnermi pre funkcie a štítky vašich údajov a uchovávajú hodnoty v niekoľkých prípadoch INDArray: jeden pre funkcie vašich príkladov, jeden pre štítky a dva ďalšie pre maskovanie, ak používate údaje časových radov. V prípade funkcií, INDArray je tenzor veľkosti Počet príkladov x Počet funkcií. Spravidla rozdelíte údaje na školenie do malých sérií; počet príkladov v INDArray je dostatočne malý na to, aby sa zmestil do pamäte, ale dostatočne veľký na to, aby získal dobrý sklon.

Ak sa pozriete na kód Deeplearning4j na definovanie modelov, ako je napríklad príklad Java uvedený nižšie, uvidíte, že ide o rozhranie API na vysokej úrovni, podobné protokolu Keras. V skutočnosti bude plánované rozhranie Pythonu k Deeplearning4j používať Keras; práve teraz, ak máte model Keras, môžete ho importovať do Deeplearning4j.

Konfigurácia MultiLayerConfiguration =

nový NeuralNetConfiguration.Builder ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

.updater (nové Nesterovs (learningRate, 0,9))

.list (

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

nový OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

aktivácia ("softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

). backprop (true) .build ();

The MultiLayerNetwork class je najjednoduchšie API na konfiguráciu siete dostupné v Eclipse Deeplearning4j; pre štruktúry DAG použite ComputationGraph namiesto toho. Všimnite si, že optimalizačný algoritmus (v tomto príklade SGD) je zadaný osobitne od aktualizátora (v tomto príklade Nesterov). Táto veľmi jednoduchá neurónová sieť má jednu hustú vrstvu s a ReLU aktivačná funkcia a jedna výstupná vrstva s -log (pravdepodobnosť) strata a a softmax aktivačná funkcia a je riešená spätným šírením. Môžu mať aj zložitejšie siete GravesLSTM, ConvolutionLayer, EmbeddingLayera ďalšie z dvoch desiatok podporovaných typov vrstiev a šestnástich typov vrstiev priestoru.

Najjednoduchší spôsob, ako trénovať model, je zavolať na .fit () metóda na konfiguráciu modelu s vaším DataSetIterator ako argument. Môžete tiež resetovať iterátor a zavolať .fit () metóda pre toľko epoch, koľko potrebujete, alebo použite EarlyStoppingTrainer.

Na otestovanie výkonu modelu použite Vyhodnotenie triedy, aby ste zistili, ako dobre trénovaný model vyhovuje vašim testovacím údajom, ktoré by nemali byť rovnaké ako tréningové údaje.

Deeplearning4j poskytuje funkciu poslucháča, ktorá vám pomôže vizuálne monitorovať výkon vašej siete, čo sa zavolá po spracovaní každej minidávky. Jedným z najčastejšie používaných poslucháčov je ScoreIterationListener.

Inštalácia a testovanie Deeplearning4j

Momentálne je najjednoduchší spôsob, ako vyskúšať Deeplearning4j, pomocou oficiálneho rýchleho štartu. Vyžaduje relatívne najnovšiu verziu Javy, inštaláciu Mavenu, funkčný Git a kópiu IntelliJ IDEA (preferovaná verzia) alebo Eclipse. Existuje tiež niekoľko rýchlych štartov od používateľov. Začnite klonovaním repo aplikácie Eclipse / deeplearning4j-examples na svoj vlastný počítač pomocou Gitu alebo GitHub Desktop. Potom nainštalujte projekty pomocou nástroja Maven z priečinka dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-examples% mvn čistá inštalácia

[INFO] Skenujú sa projekty ...

[POZOR]

[POZOR] Pri vytváraní efektívneho modelu pre org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7 sa vyskytli určité problémy

[POZOR] „build.plugins.plugin. (groupId: artifactId)“ musí byť jedinečný, ale našiel sa duplikát deklarácie pluginu org.apache.maven.plugins: maven-compiler-plugin @ linka 250, stĺpec 21

[POZOR]

[POZOR] Dôrazne sa odporúča tieto problémy opraviť, pretože ohrozujú stabilitu vašej verzie.

[POZOR]

[POZOR] Z tohto dôvodu možno budúce verzie Maven už nepodporujú vytváranie takto pokazených projektov.

[POZOR]

[INFO]

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

[INFO] Budovanie Úvod do DL4J 1.0.0-beta7

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

Stiahnuté z ústredne: //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)

Sťahovanie z ústredne: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Stiahnuté z centrálneho servera: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB pri 137 kB / s)

Sťahovanie z ústredne: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Stiahnuté z centrálneho: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar (22 kB, 396 kB / s)

Sťahovanie z ústredne: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Stiahnuté z centrálneho servera: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB, 283 kB / s)

Sťahovanie z ústredne: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Stiahnuté z ústredne: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB, 924 kB / s)

Sťahovanie z centrálnej adresy: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Stiahnuté z ústredne: //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)

Sťahovanie z ústredne: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Stiahnuté z ústredne: //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)

Sťahovanie z central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[POZOR] - org.agrona.zbery.Hash

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

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

[POZOR] - org.agrona.concurrent.SleepingIdleStrategy

[POZOR] - org.agrona.collections.MutableInteger

[POZOR] - org.agrona.collections.Int2IntHashMap

[POZOR] - org.agrona.collections.IntIntConsumer

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

[POZOR] - ďalších 175 ...

[POZOR] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar definujú 1 prekrývajúce sa triedy:

[POZOR] - informácie o module

[POZOR] protobuf-1.0.0-beta7.jar, guava-19.0.jar definujú 3 prekrývajúce sa triedy:

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

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

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

[POZOR] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar definuje 35 prekrývajúcich sa tried:

[POZOR] - javax.annotation.RegEx

[POZOR] - javax.annotation.concurrent.Imutable

[POZOR] - javax.annotation.meta.TypeQualifierDefault

[POZOR] - javax.annotation.meta.TypeQualifier

[POZOR] - javax.annotation.Syntax

[POZOR] - javax.annotation.CheckReturnValue

[POZOR] - javax.annotation.CheckForNull

[POZOR] - javax.annotation.Nonnull

[POZOR] - javax.annotation.meta.TypeQualifierNickname

[POZOR] - javax.annotation.MatchesPattern

[POZOR] - ďalších 25 ...

[POZOR] maven-shad-plugin zistil, že niektoré súbory triedy sú

[POZOR] prítomné v dvoch alebo viacerých JAR. Keď sa to stane, iba jeden

[POZOR] jedna verzia triedy sa skopíruje do uber jar.

[POZOR] Spravidla to nie je škodlivé a môžete tieto varovania preskočiť,

[POZOR] inak sa pokúste ručne vylúčiť artefakty založené na

[POZOR] mvn závislosť: strom -Ddetail = true a vyššie uvedený výstup.

[POZOR] Pozri //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Pripája sa tieňovaný artefakt.

[INFO]

[INFO] --- maven-install-plugin: 2.4: nainštalovať (predvolená inštalácia) @ dl4j-príklady ---

[INFO] Inštalácia /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar do /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0 .0-beta7 / dl4j-examples-1.0.0-beta7.jar

[INFO] Inštalácia /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/pom.xml do /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0.0-beta7/dl4j-examples-1.0 .0-beta7.pom

[INFO] Inštalácia /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7-shaded.jar do /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples /1.0.0-beta7/dl4j-examples-1.0.0-beta7-shaded.jar

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

[INFO] STAVEBNÝ ÚSPECH

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

[INFO] Celkový čas: 05:07 min

[INFO] Dokončené o: 2020-07-10T10: 58: 55-04: 00

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

martinheller @ Martins-Retina-MacBook dl4j-examples%

Po dokončení inštalácie otvorte adresár dl4j-examples / pomocou IntelliJ IDEA a skúste spustiť niektoré z príkladov.

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