Deeplearning4j: apprendimento profondo ed ETL per la JVM

Eclipse Deeplearning4j è una libreria di deep learning distribuita open source per JVM. Deeplearning4j è scritto in Java ed è compatibile con qualsiasi linguaggio JVM, come Scala, Clojure o Kotlin. I calcoli sottostanti sono scritti in C, C ++ e Cuda. Keras fungerà da API Python. Integrato con Hadoop e Apache Spark, Deeplearning4j porta l'AI negli ambienti aziendali per l'utilizzo su GPU e CPU distribuite.

Deeplearning4j è in realtà una pila di progetti destinati a supportare tutte le esigenze di un'applicazione di deep learning basata su JVM. Oltre a Deeplearning4j stesso (l'API di alto livello), include ND4J (algebra lineare generica), SameDiff (differenziazione automatica basata su grafici), DataVec (ETL), Arbiter (ricerca iperparametrica) e LibND4J C ++ (alla base di tutti di cui sopra). LibND4J a sua volta chiama le librerie standard per il supporto di CPU e GPU, come OpenBLAS, OneDNN (MKL-DNN), cuDNN e cuBLAS.

L'obiettivo di Eclipse Deeplearning4j è fornire un set base di componenti per la creazione di applicazioni che incorporano l'IA. I prodotti di intelligenza artificiale all'interno di un'azienda hanno spesso un ambito più ampio del semplice apprendimento automatico. L'obiettivo generale della distribuzione è fornire impostazioni predefinite intelligenti per la creazione di applicazioni di deep learning.

Deeplearning4j compete, a un certo livello, con ogni altro framework di deep learning. Il progetto più comparabile nell'ambito è TensorFlow, che è il principale framework di apprendimento profondo end-to-end per la produzione. TensorFlow attualmente dispone di interfacce per Python, C ++ e Java (sperimentale) e un'implementazione separata per JavaScript. TensorFlow utilizza due modalità di addestramento: modalità basata su grafici e modalità immediata (esecuzione impaziente). Deeplearning4j attualmente supporta solo l'esecuzione basata su grafici.

PyTorch, probabilmente il principale framework di deep learning per la ricerca, supporta solo la modalità immediata; ha interfacce per Python, C ++ e Java. H2O Sparkling Water integra la piattaforma di machine learning in memoria open source e distribuita H2O con Spark. H2O ha interfacce per notebook Java e Scala, Python, R e H2O Flow.

Il supporto commerciale per Deeplearning4j può essere acquistato da Konduit, che supporta anche molti degli sviluppatori che lavorano al progetto.

Come funziona Deeplearning4j

Deeplearning4j tratta le attività di caricamento dei dati e degli algoritmi di addestramento come processi separati. Caricate e trasformate i dati utilizzando la libreria DataVec e addestrate i modelli utilizzando i tensori e la libreria ND4J.

Ingerisci i dati tramite RecordReaderun'interfaccia e li visualizzi utilizzando un file RecordReaderDataSetIterator. Puoi scegliere una DataNormalizationclasse da usare come preprocessore per il tuo DataSetIterator. Utilizzare ImagePreProcessingScalerper i dati immagine, NormalizerMinMaxScalerse si dispone di un intervallo uniforme lungo tutte le dimensioni dei dati di input e NormalizerStandardizeper la maggior parte degli altri casi. Se necessario, puoi implementare una DataNormalizationclasse personalizzata .

DataSetgli oggetti sono contenitori per le caratteristiche e le etichette dei dati e mantengono i valori in diverse istanze di INDArray: uno per le caratteristiche degli esempi, uno per le etichette e due aggiuntivi per la mascheratura, se si utilizzano dati di serie temporali. Nel caso delle caratteristiche, il INDArrayè un tensore della dimensione Number of Examples x Number of Features. Tipicamente dividerete i dati in mini-batch per l'addestramento; il numero di esempi in un INDArrayè abbastanza piccolo da stare in memoria ma abbastanza grande da ottenere un buon gradiente.

Se guardi il codice Deeplearning4j per la definizione dei modelli, come l'esempio Java di seguito, vedrai che si tratta di un'API di livello molto alto, simile a Keras. Infatti, l'interfaccia Python pianificata per Deeplearning4j utilizzerà Keras; in questo momento, se hai un modello Keras, puoi importarlo in Deeplearning4j.

MultiLayerConfiguration conf =

    new NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (nuovi Nesterov (learningRate, 0.9))

        .elenco(

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

            nuovo OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

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

        ) .backprop (true) .build ();

La MultiLayerNetworkclasse è la più semplice API di configurazione della rete disponibile in Eclipse Deeplearning4j; per le strutture DAG, utilizzare ComputationGraphinvece. Si noti che l'algoritmo di ottimizzazione (SGD in questo esempio) è specificato separatamente dall'aggiornamento (Nesterov in questo esempio). Questa rete neurale molto semplice ha uno strato denso con una ReLUfunzione di attivazione e uno strato di output con -log(likelihood)una softmaxfunzione di perdita e una di attivazione, ed è risolta dalla propagazione all'indietro. Più reti complesse possono anche avere GravesLSTM, ConvolutionLayer, EmbeddingLayer, e altri dei due tipi di livello dozzine supportati e sedici tipi di spazio strato.

Il modo più semplice per addestrare il modello è chiamare il .fit()metodo sulla configurazione del modello con il tuo DataSetIteratorcome argomento. Puoi anche reimpostare l'iteratore e chiamare il .fit()metodo per tutte le epoche di cui hai bisogno o utilizzare un file EarlyStoppingTrainer.

Per testare le prestazioni del modello, usa una Evaluationclasse per vedere quanto bene il modello addestrato si adatta ai tuoi dati di test, che non dovrebbero essere gli stessi dei dati di addestramento.

Deeplearning4j fornisce una funzione di ascolto che ti aiuta a monitorare visivamente le prestazioni della tua rete, che verrà chiamata dopo l'elaborazione di ogni mini-batch. Uno degli ascoltatori più usati è ScoreIterationListener.

Installazione e test di Deeplearning4j

Al momento, il modo più semplice per provare Deeplearning4j è utilizzare l'avvio rapido ufficiale. Richiede una versione relativamente recente di Java, un'installazione di Maven, un Git funzionante e una copia di IntelliJ IDEA (preferita) o Eclipse. Ci sono anche alcuni rapidi avviamenti forniti dagli utenti. Inizia clonando il repository eclipse / deeplearning4j-examples sulla tua macchina con Git o GitHub Desktop. Quindi installa i progetti con Maven dalla cartella dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-examples% mvn installazione pulita

[ INFO ] Scansione per progetti ...

[ ATTENZIONE ]

[ ATTENZIONE ] Si sono verificati alcuni problemi durante la creazione del modello efficace per org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7

[ ATTENZIONE ] 'build.plugins.plugin. (GroupId: artifactId)' deve essere univoco ma è stata trovata una dichiarazione duplicata del plugin org.apache.maven.plugins: maven-compiler-plugin @ riga 250, colonna 21

[ ATTENZIONE ]

[ ATTENZIONE ] Si consiglia vivamente di risolvere questi problemi perché minacciano la stabilità della build.

[ ATTENZIONE ]

[ ATTENZIONE ] Per questo motivo, le future versioni di Maven potrebbero non supportare più la creazione di tali progetti malformati.

[ ATTENZIONE ]

[ INFO ]

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

[ INFO ] Introduzione alla creazione di 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.