Προγραμματισμός

Deeplearning4j: Βαθιά μάθηση και ETL για το JVM

Το Eclipse Deeplearning4j είναι μια ανοιχτή πηγή, διανεμημένη, βιβλιοθήκη βαθιάς μάθησης για το JVM. Το Deeplearning4j είναι γραμμένο σε Java και είναι συμβατό με οποιαδήποτε γλώσσα JVM, όπως Scala, Clojure ή Kotlin. Οι υποκείμενοι υπολογισμοί γράφονται σε C, C ++ και Cuda. Το Keras θα χρησιμεύσει ως API Python. Ενσωματωμένο με το Hadoop και το Apache Spark, το Deeplearning4j φέρνει το AI σε επιχειρηματικά περιβάλλοντα για χρήση σε κατανεμημένες GPU και CPU.

Το Deeplearning4j είναι στην πραγματικότητα μια στοίβα έργων που προορίζονται να υποστηρίξουν όλες τις ανάγκες μιας εφαρμογής βαθιάς μάθησης με βάση το JVM. Πέρα από το ίδιο το Deeplearning4j (το API υψηλού επιπέδου), περιλαμβάνει ND4J (γραμμική άλγεβρα γενικής χρήσης), SameDiff (αυτόματη διαφοροποίηση βάσει γραφημάτων), DataVec (ETL), Arbiter (αναζήτηση υπερπαραμέτρου) και το C ++ LibND4J (υποστηρίζει όλα απο τα παραπανω). Το LibND4J με τη σειρά του καλεί τυπικές βιβλιοθήκες για υποστήριξη CPU και GPU, όπως OpenBLAS, OneDNN (MKL-DNN), cuDNN και cuBLAS.

Ο στόχος του Eclipse Deeplearning4j είναι να παρέχει ένα βασικό σύνολο συστατικών για την κατασκευή εφαρμογές που ενσωματώνουν AI. Τα προϊόντα τεχνητής νοημοσύνης σε μια επιχείρηση έχουν συχνά ευρύτερο πεδίο από την απλή μάθηση. Ο γενικός στόχος της διανομής είναι η παροχή έξυπνων προεπιλογών για τη δημιουργία εφαρμογών βαθιάς μάθησης.

Το Deeplearning4j ανταγωνίζεται, σε κάποιο επίπεδο, με κάθε άλλο πλαίσιο βαθιάς μάθησης. Το πιο συγκρίσιμο έργο στο πεδίο εφαρμογής είναι το TensorFlow, το οποίο είναι το κορυφαίο πλαίσιο βαθιάς μάθησης για παραγωγή. Το TensorFlow έχει αυτήν τη στιγμή διεπαφές για Python, C ++ και Java (πειραματικό), και μια ξεχωριστή εφαρμογή για JavaScript. Το TensorFlow χρησιμοποιεί δύο τρόπους προπόνησης: τη γραφική παράσταση και την άμεση λειτουργία (πρόθυμη εκτέλεση). Το Deeplearning4j προς το παρόν υποστηρίζει μόνο εκτέλεση βάσει γραφήματος.

Το PyTorch, πιθανώς το κορυφαίο πλαίσιο βαθιάς μάθησης για την έρευνα, υποστηρίζει μόνο την άμεση λειτουργία. έχει διεπαφές για Python, C ++ και Java. Το H2O Sparkling Water ενσωματώνει το H2O open source, διανεμημένη πλατφόρμα μηχανικής εκμάθησης στη μνήμη με το Spark. Το H2O έχει διεπαφές για φορητούς υπολογιστές Java και Scala, Python, R και H2O Flow.

Μπορείτε να αγοράσετε εμπορική υποστήριξη για το Deeplearning4j από την Konduit, η οποία υποστηρίζει επίσης πολλούς από τους προγραμματιστές που εργάζονται στο έργο.

Πώς λειτουργεί το Deeplearning4j

Το Deeplearning4j αντιμετωπίζει τις εργασίες φόρτωσης δεδομένων και αλγορίθμων εκπαίδευσης ως ξεχωριστές διαδικασίες. Φορτώνετε και μεταμορφώνετε τα δεδομένα χρησιμοποιώντας τη βιβλιοθήκη DataVec και εκπαιδεύετε μοντέλα χρησιμοποιώντας τανυστές και τη βιβλιοθήκη ND4J.

Καταλαμβάνετε δεδομένα μέσω α Εγγραφή αναγνώστη διεπαφή και περιηγηθείτε στα δεδομένα χρησιμοποιώντας ένα RecordReaderDataSetIterator. Μπορείτε να επιλέξετε ένα Κανονικοποίηση δεδομένων τάξη για χρήση ως προεπεξεργαστής για το δικό σας DataSetIterator. Χρησιμοποιήστε το ImagePreProcessingScaler για δεδομένα εικόνας, το NormalizerMinMaxScaler εάν έχετε ομοιόμορφο εύρος σε όλες τις διαστάσεις των δεδομένων εισαγωγής σας και Κανονικοποιητής Τυποποίηση για τις περισσότερες άλλες περιπτώσεις. Εάν είναι απαραίτητο, μπορείτε να εφαρμόσετε ένα έθιμο Κανονικοποίηση δεδομένων τάξη.

Σύνολο δεδομένων τα αντικείμενα είναι κοντέινερ για τις δυνατότητες και τις ετικέτες των δεδομένων σας και διατηρούν τις τιμές σε πολλές περιπτώσεις INDArray: ένα για τις δυνατότητες των παραδειγμάτων σας, ένα για τις ετικέτες και δύο επιπλέον για κάλυψη, εάν χρησιμοποιείτε δεδομένα χρονοσειρών. Στην περίπτωση των χαρακτηριστικών, το INDArray είναι μια τάση του μεγέθους Αριθμός παραδειγμάτων x Αριθμός χαρακτηριστικών. Συνήθως θα διαιρέσετε τα δεδομένα σε μικρές παρτίδες για εκπαίδευση. ο αριθμός των παραδειγμάτων σε ένα INDArray είναι αρκετά μικρό για να χωρά στη μνήμη αλλά αρκετά μεγάλο για να έχει καλή κλίση.

Αν κοιτάξετε τον κώδικα Deeplearning4j για τον ορισμό μοντέλων, όπως το παρακάτω παράδειγμα Java, θα δείτε ότι είναι ένα API υψηλού επιπέδου, παρόμοιο με το Keras. Στην πραγματικότητα, η προγραμματισμένη διεπαφή Python στο Deeplearning4j θα χρησιμοποιεί το Keras. αυτή τη στιγμή, εάν έχετε μοντέλο Keras, μπορείτε να το εισαγάγετε στο Deeplearning4j.

MultiLayerConfiguration conf =

νέο NeuralNetConfiguration.Builder ()

.optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

.updater (νέο Nesterovs (learningRate, 0,9))

.λίστα(

νέο DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes) .activation ("relu"). build (),

νέο OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

ενεργοποίηση ("softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

) .backprop (true) .build ();

ο MultiLayerNetwork Το class είναι το απλούστερο API διαμόρφωσης δικτύου που είναι διαθέσιμο στο Eclipse Deeplearning4j. για δομές DAG, χρησιμοποιήστε το Υπολογισμός αντι αυτου. Σημειώστε ότι ο αλγόριθμος βελτιστοποίησης (SGD σε αυτό το παράδειγμα) καθορίζεται ξεχωριστά από τον ενημερωτή (Nesterov σε αυτό το παράδειγμα). Αυτό το πολύ απλό νευρωνικό δίκτυο έχει ένα πυκνό στρώμα με ένα ReLU λειτουργία ενεργοποίησης και ένα επίπεδο εξόδου με -log (πιθανότητα) απώλεια και α softmax συνάρτηση ενεργοποίησης και επιλύεται με τη μετάδοση. Πιο σύνθετα δίκτυα μπορεί επίσης να έχουν GravesLS ™, Επίπεδο Convolution, EmbeddingLayer, και άλλοι από τους δεκάδες υποστηριζόμενους τύπους επιπέδων και δεκαέξι τύπους διαστημικού επιπέδου

Ο απλούστερος τρόπος για να εκπαιδεύσετε το μοντέλο είναι να καλέσετε το .κατάλληλος() μέθοδος για τη διαμόρφωση του μοντέλου με το DataSetIterator ως επιχείρημα. Μπορείτε επίσης να επαναφέρετε τον επαναληπτή και να καλέσετε το .κατάλληλος() μέθοδο για όσες εποχές χρειάζεστε ή χρησιμοποιήστε ένα EarlyStoppingTrainer.

Για να ελέγξετε την απόδοση του μοντέλου, χρησιμοποιήστε ένα Εκτίμηση τάξη για να δείτε πόσο καλά το εκπαιδευμένο μοντέλο ταιριάζει στα δεδομένα δοκιμής σας, τα οποία δεν πρέπει να είναι ίδια με τα δεδομένα εκπαίδευσης.

Το Deeplearning4j παρέχει μια δυνατότητα ακροατή που σας βοηθά να παρακολουθείτε οπτικά την απόδοση του δικτύου σας, η οποία θα καλείται μετά την επεξεργασία κάθε μίνι παρτίδας. Ένας από τους πιο συχνά χρησιμοποιούμενους ακροατές είναι ScoreIterationListener.

Εγκατάσταση και δοκιμή Deeplearning4j

Προς το παρόν, ο ευκολότερος τρόπος να δοκιμάσετε το Deeplearning4j είναι να χρησιμοποιήσετε την επίσημη γρήγορη εκκίνηση. Απαιτεί μια σχετικά πρόσφατη έκδοση της Java, μια εγκατάσταση του Maven, ενός Git που λειτουργεί και ένα αντίγραφο του IntelliJ IDEA (προτιμώμενο) ή του Eclipse. Υπάρχουν επίσης μερικές γρήγορες εκκινήσεις που συνεισφέρει ο χρήστης. Ξεκινήστε κλωνοποιώντας το eclipse / deeplearning4j-samples repo στο δικό σας μηχάνημα με το Git ή το GitHub Desktop. Στη συνέχεια, εγκαταστήστε τα έργα με το Maven από το φάκελο dl4j-samples.

martinheller @ Martins-Retina-MacBook dl4j-παραδείγματα% mvn clean install

[ΠΛΗΡΟΦΟΡΙΕΣ] Σάρωση για έργα ...

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ]

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Παρουσιάστηκαν ορισμένα προβλήματα κατά τη δημιουργία του αποτελεσματικού μοντέλου για το org.deeplearning4j: dl4j-παραδείγματα: jar: 1.0.0-beta7

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] 'build.plugins.plugin. (groupId: artifactId)' πρέπει να είναι μοναδική, αλλά βρέθηκε διπλή δήλωση του plugin org.apache.maven.plugins: maven-compiler-plugin @ line 250, στήλη 21

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ]

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Συνιστάται ιδιαίτερα να διορθώσετε αυτά τα προβλήματα επειδή απειλούν τη σταθερότητα του κτιρίου σας.

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ]

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Για αυτόν τον λόγο, οι μελλοντικές εκδόσεις Maven ενδέχεται να μην υποστηρίζουν πλέον την κατασκευή τέτοιων έργων με λανθασμένη μορφή.

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ]

[ΠΛΗΡΟΦΟΡΙΕΣ]

[ΠΛΗΡΟΦΟΡΙΕΣ] ------------------< org.deeplearning4j: dl4j-παραδείγματα >------------------

[ΠΛΗΡΟΦΟΡΙΕΣ] Κτίριο Εισαγωγή στο DL4J 1.0.0-beta7

[ΠΛΗΡΟΦΟΡΙΕΣ] -------------------------------- [βάζο] --------------- ------------------

Λήψη από το κέντρο: //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 στα 4.4 kB / s)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB στα 137 kB / s)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar

Λήψη από το κέντρο: //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)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom

Λήψη από το κέντρο: //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 / μικρό)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jar

Λήψη από το κέντρο: //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 / μικρό)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB στα 430 kB / s)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar (106 kB στα 1,6 MB / s)

Λήψη από το κέντρο: //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.Hashing

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.Long2ObjectCache $ ValueIterator

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.Int2ObjectHashMap $ EntrySet

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.concurrent.SleepingIdleStrategy

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.MutableInteger

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.Int2IntHashMap

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.collections.IntIntConsumer

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - org.agrona.concurrent.status.StatusIndicator

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - 175 ακόμη ...

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] javafx-base-14-mac.jar, javafx-graphic-14-mac.jar, jakarta.xml.bind-api-2.3.2.jar ορίστε 1 επικαλυπτόμενες κατηγορίες:

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - ενότητα-πληροφορίες

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] protobuf-1.0.0-beta7.jar, guava-19.0.jar ορίζουν 3 επικαλυπτόμενες κατηγορίες:

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - com.google.thirdparty.publicsuffix.TrieParser

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - com.google.thirdparty.publicsuffix.PublicSuffixPatterns

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - com.google.thirdparty.publicsuffix.PublicSuffixType

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] jsr305-3.0.2.jar, guava-1.0.0-beta7.jar ορίζει 35 επικαλυπτόμενες κατηγορίες:

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.RegEx

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.concurrent. Αμετάβλητο

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.meta.TypeQualifierDefault

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.meta.TypeQualifier

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.Syntax

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.CheckReturnValue

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.CheckForNull

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.Nonnull

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.meta.TypeQualifierNickname

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - javax.annotation.MatchesPattern

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] - 25 ακόμη ...

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Το maven-shadow-plugin εντόπισε ότι ορισμένα αρχεία κατηγορίας είναι

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] παρόν σε δύο ή περισσότερα βάζα. Όταν συμβεί αυτό, μόνο ένα

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] μία έκδοση της τάξης αντιγράφεται στο βάζο uber.

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Συνήθως αυτό δεν είναι επιβλαβές και μπορείτε να παραλείψετε αυτές τις προειδοποιήσεις,

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] αλλιώς προσπαθήστε να εξαιρέσετε χειροποίητα αντικείμενα με βάση

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] εξάρτηση mvn: tree -Ddetail = true και η παραπάνω έξοδος.

[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Δείτε //maven.apache.org/plugins/maven-shade-plugin/

[ΠΛΗΡΟΦΟΡΙΕΣ] Προσάρτηση σκιασμένου αντικειμένου.

[ΠΛΗΡΟΦΟΡΙΕΣ]

[ΠΛΗΡΟΦΟΡΙΕΣ] --- maven-install-plugin: 2.4: εγκατάσταση (προεπιλεγμένη εγκατάσταση) @ dl4j-παραδείγματα ---

[ΠΛΗΡΟΦΟΡΙΕΣΕγκατάσταση /Volume/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7.jar στο /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-examples/1.0 .0-beta7 / dl4j-samples-1.0.0-beta7.jar

[ΠΛΗΡΟΦΟΡΙΕΣΕγκατάσταση /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

[ΠΛΗΡΟΦΟΡΙΕΣΕγκατάσταση /Volumes/Data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0.0-beta7-shaded.jar στο /Users/martinheller/.m2/repository/org/deeplearning4j/dl4j-exam /1.0.0-beta7/dl4j-examples-1.0.0-beta7-shaded.jar

[ΠΛΗΡΟΦΟΡΙΕΣ] ------------------------------------------------------------------------

[ΠΛΗΡΟΦΟΡΙΕΣ] ΚΑΤΑΣΚΕΥΗ ΕΠΙΤΥΧΙΑΣ

[ΠΛΗΡΟΦΟΡΙΕΣ] ------------------------------------------------------------------------

[ΠΛΗΡΟΦΟΡΙΕΣ] Συνολικός χρόνος: 05:07 λεπτά

[ΠΛΗΡΟΦΟΡΙΕΣ] Ολοκληρώθηκε στις: 2020-07-10T10: 58: 55-04: 00

[ΠΛΗΡΟΦΟΡΙΕΣ] ------------------------------------------------------------------------

martinheller @ Martins-Retina-MacBook dl4j-παραδείγματα%

Μόλις ολοκληρωθεί η εγκατάσταση, ανοίξτε τον κατάλογο dl4j-samples / IntelliJ IDEA και δοκιμάστε να εκτελέσετε μερικά από τα παραδείγματα.