Programování

Deeplearning4j: Hluboké učení a ETL pro JVM

Eclipse Deeplearning4j je open source, distribuovaná, hluboká výuková knihovna pro JVM. Deeplearning4j je napsán v Javě a je kompatibilní s jakýmkoli jazykem JVM, jako je Scala, Clojure nebo Kotlin. Základní výpočty jsou psány v C, C ++ a Cuda. Keras bude sloužit jako Python API. Díky integraci s Hadoop a Apache Spark přináší Deeplearning4j AI do podnikových prostředí pro použití na distribuovaných GPU a CPU.

Deeplearning4j je ve skutečnosti hromada projektů určených k podpoře všech potřeb aplikace hlubokého učení založené na JVM. Kromě samotného Deeplearning4j (API na vysoké úrovni) zahrnuje ND4J (univerzální lineární algebra,), SameDiff (automatická diferenciace na základě grafů), DataVec (ETL), Arbiter (hledání hyperparametrů) a C ++ LibND4J (podporuje všechny výše). LibND4J zase volá na standardní knihovny pro podporu CPU a GPU, jako jsou OpenBLAS, OneDNN (MKL-DNN), cuDNN a cuBLAS.

Cílem Eclipse Deeplearning4j je poskytnout základní sadu komponent pro stavbu aplikace které obsahují AI. Produkty AI v rámci podniku mají často širší rozsah než jen strojové učení. Celkovým cílem distribuce je poskytnout inteligentní výchozí hodnoty pro vytváření aplikací hlubokého učení.

Deeplearning4j soutěží na určité úrovni s každým dalším rámcem hlubokého učení. Nejrovnatelnějším projektem v rozsahu je TensorFlow, což je přední end-to-end rámec hlubokého učení pro produkci. TensorFlow má aktuálně rozhraní pro Python, C ++ a Java (experimentální) a samostatnou implementaci pro JavaScript. TensorFlow používá dva způsoby tréninku: grafický a okamžitý režim (dychtivé provedení). Deeplearning4j aktuálně podporuje pouze provádění založené na grafech.

PyTorch, pravděpodobně přední rámec hlubokého učení pro výzkum, podporuje pouze okamžitý režim; má rozhraní pro Python, C ++ a Java. H2O Sparkling Water integruje H2O open source, distribuovanou platformu pro strojové učení v paměti se Sparkem. H2O má rozhraní pro notebooky Java a Scala, Python, R a H2O Flow.

Komerční podporu pro Deeplearning4j lze zakoupit od společnosti Konduit, která také podporuje mnoho vývojářů pracujících na projektu.

Jak Deeplearning4j funguje

Deeplearning4j zachází s úkoly načítání dat a tréninkových algoritmů jako se samostatnými procesy. Data načítáte a transformujete pomocí knihovny DataVec a trénujete modely pomocí tenzorů a knihovny ND4J.

Data přijímáte prostřednictvím a RecordReader rozhraní a procházejte daty pomocí a RecordReaderDataSetIterator. Můžete si vybrat a Normalizace dat třídy použít jako preprocesor pro vaše DataSetIterator. Použijte ImagePreProcessingScaler pro obrazová data NormalizerMinMaxScaler pokud máte jednotný rozsah ve všech rozměrech vstupních dat, a Normalizátor Standardizovat pro většinu ostatních případů. V případě potřeby můžete implementovat vlastní Normalizace dat třída.

DataSet objekty jsou kontejnery pro funkce a štítky vašich dat a uchovávají hodnoty v několika případech INDArray: jeden pro funkce vašich příkladů, jeden pro popisky a dva další pro maskování, pokud používáte data časových řad. V případě funkcí, INDArray je tenzor velikosti Počet příkladů x Počet funkcí. Data pro školení obvykle rozdělíte do mini-dávek; počet příkladů v INDArray je dostatečně malý, aby se vešel do paměti, ale dostatečně velký, aby získal dobrý sklon.

Pokud se podíváte na kód Deeplearning4j pro definování modelů, jako je příklad Java níže, uvidíte, že se jedná o API na velmi vysoké úrovni, podobně jako Keras. Ve skutečnosti bude plánované rozhraní Pythonu k Deeplearning4j používat Keras; právě teď, pokud máte model Keras, můžete jej importovat do Deeplearning4j.

MultiLayerConfiguration conf =

nový NeuralNetConfiguration.Builder ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

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

.seznam(

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

nový OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

) .backprop (true) .build ();

The Vícevrstvá síť class je nejjednodušší rozhraní pro konfiguraci sítě dostupné v Eclipse Deeplearning4j; pro struktury DAG použijte Výpočet Graf namísto. Všimněte si, že optimalizační algoritmus (v tomto příkladu SGD) je specifikován odděleně od aktualizátoru (v tomto příkladu Nesterov). Tato velmi jednoduchá neurální síť má jednu hustou vrstvu s a ReLU aktivační funkce a jedna výstupní vrstva s -log (pravděpodobnost) ztráta a softmax aktivační funkce a je řešena zpětným šířením. Mohou mít i složitější sítě GravesLSTM, ConvolutionLayer, Vkládací vrstvaa další ze dvou desítek podporovaných typů vrstev a šestnácti typů vrstev.

Nejjednodušší způsob, jak trénovat model, je zavolat .vejít se() metoda na konfiguraci modelu s vaším DataSetIterator jako argument. Můžete také resetovat iterátor a zavolat na .vejít se() metoda pro tolik epoch, kolik potřebujete, nebo použijte EarlyStoppingTrainer.

Chcete-li otestovat výkon modelu, použijte Hodnocení třídy, abyste zjistili, jak dobře trénovaný model odpovídá vašim testovacím datům, která by neměla být stejná jako tréninková data.

Deeplearning4j poskytuje nástroj pro posluchače, který vám pomůže vizuálně sledovat výkon vaší sítě, což se zavolá po zpracování každé minidávky. Jedním z nejčastěji používaných posluchačů je ScoreIterationListener.

Instalace a testování Deeplearning4j

V tuto chvíli je nejjednodušší způsob, jak vyzkoušet Deeplearning4j, pomocí oficiálního rychlého startu. Vyžaduje relativně nedávnou verzi Javy, instalaci Mavenu, funkční Git a kopii IntelliJ IDEA (preferováno) nebo Eclipse. Existuje také několik rychlých startů od uživatelů. Začněte klonováním repo aplikace Eclipse / deeplearning4j-examples na svůj vlastní počítač pomocí Git nebo GitHub Desktop. Potom nainstalujte projekty pomocí Maven ze složky dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-examples% mvn čistá instalace

[INFO] Hledání projektů ...

[VAROVÁNÍ]

[VAROVÁNÍ] Při vytváření efektivního modelu pro org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7 došlo k problémům

[VAROVÁNÍ] „build.plugins.plugin. (groupId: artifactId)“ musí být jedinečný, ale byl nalezen duplikát deklarace pluginu org.apache.maven.plugins: maven-compiler-plugin @ řádek 250, sloupec 21

[VAROVÁNÍ]

[VAROVÁNÍ] Důrazně doporučujeme tyto problémy opravit, protože ohrožují stabilitu vaší sestavy.

[VAROVÁNÍ]

[VAROVÁNÍ] Z tohoto důvodu budoucí verze Maven již nemusí podporovat vytváření takto poškozených projektů.

[VAROVÁNÍ]

[INFO]

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

[INFO] Vytváření úvodu k DL4J 1.0.0-beta7

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

Staženo z 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 při 4,4 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Staženo z central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB při 137 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Staženo z 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 při 396 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Staženo z central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom (12 kB při 283 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Staženo z central: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar (46 kB při 924 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Staženo z central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB při 430 kB / s)

Stahování z central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Staženo z central: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB při 1,6 MB / s)

Stahování z central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[VAROVÁNÍ] - org.agrona.kolekce.Hashing

[VAROVÁNÍ] - org.agrona.collections.Long2ObjectCache $ ValueIterator

[VAROVÁNÍ] - org.agrona.collections.Int2ObjectHashMap $ EntrySet

[VAROVÁNÍ] - org.agrona.concurrent.SleepingIdleStrategy

[VAROVÁNÍ] - org.agrona.collections.MutableInteger

[VAROVÁNÍ] - org.agrona.collections.Int2IntHashMap

[VAROVÁNÍ] - org.agrona.collections.IntIntConsumer

[VAROVÁNÍ] - org.agrona.concurrent.status.StatusIndicator

[VAROVÁNÍ] - dalších 175 ...

[VAROVÁNÍ] javafx-base-14-mac.jar, javafx-graphics-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar definují 1 překrývající se třídy:

[VAROVÁNÍ] - informace o modulu

[VAROVÁNÍ] protobuf-1.0.0-beta7.jar, guava-19.0.jar definují 3 překrývající se třídy:

[VAROVÁNÍ] - com.google.thirdparty.publicsuffix.TrieParser

[VAROVÁNÍ] - com.google.thirdparty.publicsuffix.PublicSuffixPatterns

[VAROVÁNÍ] - com.google.thirdparty.publicsuffix.PublicSuffixType

[VAROVÁNÍ] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar definuje 35 překrývajících se tříd:

[VAROVÁNÍ] - javax.annotation.RegEx

[VAROVÁNÍ] - javax.annotation.concurrent.Imutable

[VAROVÁNÍ] - javax.annotation.meta.TypeQualifierDefault

[VAROVÁNÍ] - javax.annotation.meta.TypeQualifier

[VAROVÁNÍ] - javax.annotation.Syntax

[VAROVÁNÍ] - javax.annotation.CheckReturnValue

[VAROVÁNÍ] - javax.annotation.CheckForNull

[VAROVÁNÍ] - javax.annotation.Nonnull

[VAROVÁNÍ] - javax.annotation.meta.TypeQualifierNickname

[VAROVÁNÍ] - javax.annotation.MatchesPattern

[VAROVÁNÍ] - dalších 25 ...

[VAROVÁNÍ] maven-shad-plugin zjistil, že některé soubory třídy jsou

[VAROVÁNÍ] přítomný ve dvou nebo více JAR. Když k tomu dojde, pouze jeden

[VAROVÁNÍ] jedna verze třídy je zkopírována do uber jar.

[VAROVÁNÍ] Obvykle to není škodlivé a můžete tato upozornění přeskočit,

[VAROVÁNÍ] jinak zkuste ručně vyloučit artefakty založené na

[VAROVÁNÍ] závislost mvn: strom -Ddetail = true a výše uvedený výstup.

[VAROVÁNÍ] Viz //maven.apache.org/plugins/maven-shade-plugin/

[INFO] Připojení stínovaného artefaktu.

[INFO]

[INFO] --- maven-install-plugin: 2.4: install (výchozí instalace) @ dl4j-příklady ---

[INFO] Instalace /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] Instalace /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] Instalace /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] BUILD ÚSPĚCH

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

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

[INFO] Dokončeno v: 2020-07-10T10: 58: 55-04: 00

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

martinheller @ Martins-Retina-MacBook dl4j-examples%

Po dokončení instalace otevřete adresář dl4j-examples / pomocí IntelliJ IDEA a zkuste spustit některé z příkladů.

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