Deeplearning4j: Deep Learning und ETL für die JVM

Eclipse Deeplearning4j ist eine Open Source, verteilte Deep Learning-Bibliothek für die JVM. Deeplearning4j ist in Java geschrieben und mit jeder JVM-Sprache wie Scala, Clojure oder Kotlin kompatibel. Die zugrunde liegenden Berechnungen sind in C, C ++ und Cuda geschrieben. Keras wird als Python-API dienen. Deeplearning4j ist in Hadoop und Apache Spark integriert und bringt KI in Geschäftsumgebungen zur Verwendung auf verteilten GPUs und CPUs.

Deeplearning4j ist eigentlich ein Stapel von Projekten, die alle Anforderungen einer JVM-basierten Deep-Learning-Anwendung erfüllen sollen. Neben Deeplearning4j selbst (der High-Level-API) enthält es ND4J (Allzweck-Linearalgebra), SameDiff (graphbasierte automatische Differenzierung), DataVec (ETL), Arbiter (Hyperparametersuche) und C ++ LibND4J (unterstützt alle) von oben). LibND4J ruft wiederum Standardbibliotheken für die CPU- und GPU-Unterstützung auf, z. B. OpenBLAS, OneDNN (MKL-DNN), cuDNN und cuBLAS.

Das Ziel von Eclipse Deeplearning4j ist die Bereitstellung eines Kernsatzes von Komponenten zum Erstellen von Anwendungen , die KI enthalten. KI-Produkte innerhalb eines Unternehmens haben oft einen größeren Anwendungsbereich als nur maschinelles Lernen. Das übergeordnete Ziel der Verteilung besteht darin, intelligente Standardeinstellungen für die Erstellung von Deep-Learning-Anwendungen bereitzustellen.

Deeplearning4j konkurriert auf einer bestimmten Ebene mit jedem anderen Deep-Learning-Framework. Das vergleichbarste Projekt im Umfang ist TensorFlow, das führende End-to-End-Deep-Learning-Framework für die Produktion. TensorFlow verfügt derzeit über Schnittstellen für Python, C ++ und Java (experimentell) sowie eine separate Implementierung für JavaScript. TensorFlow verwendet zwei Trainingsmethoden: den graphbasierten und den Sofortmodus (eifrige Ausführung). Deeplearning4j unterstützt derzeit nur die graphbasierte Ausführung.

PyTorch, wahrscheinlich das führende Deep-Learning-Framework für die Forschung, unterstützt nur den Sofortmodus. Es verfügt über Schnittstellen für Python, C ++ und Java. H2O Sparkling Water integriert die verteilte In-Memory-Plattform für maschinelles Lernen mit Open Source in Spark. H2O verfügt über Schnittstellen für Java- und Scala-, Python-, R- und H2O Flow-Notebooks.

Kommerzielle Unterstützung für Deeplearning4j kann von Konduit erworben werden, das auch viele der Entwickler unterstützt, die an dem Projekt arbeiten.

Wie Deeplearning4j funktioniert

Deeplearning4j behandelt die Aufgaben des Ladens von Daten und Trainingsalgorithmen als separate Prozesse. Sie laden und transformieren die Daten mithilfe der DataVec-Bibliothek und trainieren Modelle mithilfe von Tensoren und der ND4J-Bibliothek.

Sie nehmen Daten über eine RecordReaderSchnittstelle auf und gehen die Daten mit a durch RecordReaderDataSetIterator. Sie können eine DataNormalizationKlasse auswählen , die als Präprozessor für Ihre Klasse verwendet werden soll DataSetIterator. Verwenden Sie die Option ImagePreProcessingScalerfür Bilddaten, NormalizerMinMaxScalerwenn Sie über alle Dimensionen Ihrer Eingabedaten hinweg einen einheitlichen Bereich haben, und NormalizerStandardizefür die meisten anderen Fälle. Bei Bedarf können Sie eine benutzerdefinierte DataNormalizationKlasse implementieren .

DataSetObjekte sind Container für die Merkmale und Beschriftungen Ihrer Daten und behalten die Werte in mehreren Fällen bei INDArray: einem für die Merkmale Ihrer Beispiele, einem für die Beschriftungen und zwei zusätzlichen für die Maskierung, wenn Sie Zeitreihendaten verwenden. Bei den Merkmalen ist der INDArrayein Tensor der Größe Number of Examples x Number of Features. Normalerweise teilen Sie die Daten für das Training in Mini-Batches auf. Die Anzahl der Beispiele in a INDArrayist klein genug, um in den Speicher zu passen, aber groß genug, um einen guten Gradienten zu erhalten.

Wenn Sie sich den Deeplearning4j-Code zum Definieren von Modellen ansehen, wie im folgenden Java-Beispiel, werden Sie feststellen, dass es sich um eine API auf sehr hoher Ebene handelt, die Keras ähnelt. Tatsächlich wird die geplante Python-Schnittstelle zu Deeplearning4j Keras verwenden. Wenn Sie ein Keras-Modell haben, können Sie es jetzt in Deeplearning4j importieren.

MultiLayerConfiguration conf =

    neue NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (neue Nesterovs (learningRate, 0.9))

        .Liste(

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

            neuer OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

        ) .backprop (true) .build ();

Die MultiLayerNetworkKlasse ist die einfachste Netzwerkkonfigurations-API, die in Eclipse Deeplearning4j verfügbar ist. Verwenden Sie für DAG-Strukturen ComputationGraphstattdessen die. Beachten Sie, dass der Optimierungsalgorithmus (in diesem Beispiel SGD) separat vom Updater (in diesem Beispiel Nesterov) angegeben wird. Dieses sehr einfache neuronale Netzwerk hat eine dichte Schicht mit einer ReLUAktivierungsfunktion und eine Ausgangsschicht mit -log(likelihood)Verlust und einer softmaxAktivierungsfunktion und wird durch Rückausbreitung gelöst. Komplexere Netzwerke auch haben können GravesLSTM, ConvolutionLayer, EmbeddingLayer, und andere der zwei Dutzend unterstützten Schichttypen und sechzehn Schichtraumtypen.

Der einfachste Weg, das Modell zu trainieren, besteht darin, die .fit()Methode für die Modellkonfiguration mit Ihrem DataSetIteratorals Argument aufzurufen . Sie können den Iterator auch zurücksetzen und die .fit()Methode für so viele Epochen aufrufen, wie Sie benötigen, oder eine verwenden EarlyStoppingTrainer.

Verwenden Sie zum Testen der Modellleistung eine EvaluationKlasse, um festzustellen, wie gut das trainierte Modell zu Ihren Testdaten passt, die nicht mit den Trainingsdaten übereinstimmen sollten.

Deeplearning4j bietet eine Listener-Funktion, mit der Sie die Leistung Ihres Netzwerks visuell überwachen können. Diese Funktion wird aufgerufen, nachdem jeder Mini-Batch verarbeitet wurde. Einer der am häufigsten verwendeten Zuhörer ist ScoreIterationListener.

Deeplearning4j installieren und testen

Im Moment ist der einfachste Weg, Deeplearning4j auszuprobieren, die Verwendung des offiziellen Schnellstarts. Es erfordert eine relativ aktuelle Version von Java, eine Installation von Maven, einen funktionierenden Git und eine Kopie von IntelliJ IDEA (bevorzugt) oder Eclipse. Es gibt auch einige vom Benutzer bereitgestellte Schnellstarts. Klonen Sie zunächst das Repo eclipse / deeplearning4j-examples mit Git oder GitHub Desktop auf Ihren eigenen Computer. Installieren Sie dann die Projekte mit Maven aus dem Ordner dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-Beispiele% mvn Neuinstallation

[ INFO ] Nach Projekten suchen ...

[ WARNUNG ]

[ WARNUNG ] Beim Erstellen des effektiven Modells für org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7 sind einige Probleme aufgetreten

[ WARNUNG ] build.plugins.plugin (groupId: artifactId). "Muss eindeutig sein , aber gefunden doppelte Erklärung Plugin org.apache.maven.plugins: maven-Compiler-Plugin @ Zeile 250, Spalte 21

[ WARNUNG ]

[ WARNUNG ] Es wird dringend empfohlen, diese Probleme zu beheben, da sie die Stabilität Ihres Builds gefährden.

[ WARNUNG ]

[ WARNUNG ] Aus diesem Grund unterstützen zukünftige Maven-Versionen möglicherweise nicht mehr das Erstellen solcher fehlerhaften Projekte.

[ WARNUNG ]

[ INFO ]

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

[ INFO ] Erstellen einer Einführung in DL4J 1.0.0-beta7

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

Downloaded from 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 at 4.4 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Downloaded from central: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB at 137 kB/s)

Downloading from central: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Downloaded from 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 at 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.