Deeplearning4j: Pembelajaran mendalam dan ETL untuk JVM

Eclipse Deeplearning4j adalah pustaka pembelajaran mendalam, terdistribusi, dan open source untuk JVM. Deeplearning4j ditulis di Java dan kompatibel dengan bahasa JVM apa pun, seperti Scala, Clojure, atau Kotlin. Perhitungan yang mendasari ditulis dalam C, C ++, dan Cuda. Keras akan berfungsi sebagai API Python. Terintegrasi dengan Hadoop dan Apache Spark, Deeplearning4j menghadirkan AI ke lingkungan bisnis untuk digunakan pada GPU dan CPU terdistribusi.

Deeplearning4j sebenarnya adalah setumpuk proyek yang dimaksudkan untuk mendukung semua kebutuhan aplikasi pembelajaran dalam berbasis JVM. Selain Deeplearning4j itu sendiri (API tingkat tinggi), ini mencakup ND4J (aljabar linier tujuan umum), SameDiff (diferensiasi otomatis berbasis grafik), DataVec (ETL), Arbiter (pencarian hyperparameter), dan C ++ LibND4J (mendukung semua di atas). LibND4J secara bergantian memanggil pustaka standar untuk dukungan CPU dan GPU, seperti OpenBLAS, OneDNN (MKL-DNN), cuDNN, dan cuBLAS.

Sasaran dari Eclipse Deeplearning4j adalah menyediakan sekumpulan komponen inti untuk membangun aplikasi yang menggabungkan AI. Produk AI dalam suatu perusahaan sering kali memiliki cakupan yang lebih luas daripada sekadar pembelajaran mesin. Tujuan keseluruhan dari distribusi ini adalah menyediakan default cerdas untuk membangun aplikasi pembelajaran yang mendalam.

Deeplearning4j bersaing, pada tingkat tertentu, dengan setiap kerangka pembelajaran mendalam lainnya. Project yang paling sebanding dalam cakupannya adalah TensorFlow, yang merupakan framework deep learning ujung ke ujung terkemuka untuk produksi. TensorFlow saat ini memiliki antarmuka untuk Python, C ++, dan Java (eksperimental), dan implementasi terpisah untuk JavaScript. TensorFlow menggunakan dua cara pelatihan: berbasis grafik dan mode langsung (eksekusi cepat). Deeplearning4j saat ini hanya mendukung eksekusi berbasis grafik.

PyTorch, mungkin kerangka kerja pembelajaran mendalam terkemuka untuk penelitian, hanya mendukung mode langsung; itu memiliki antarmuka untuk Python, C ++, dan Java. H2O Sparkling Water mengintegrasikan platform pembelajaran mesin dalam memori H2O yang terdistribusi dengan Spark. H2O memiliki antarmuka untuk notebook Java dan Scala, Python, R, dan H2O Flow.

Dukungan komersial untuk Deeplearning4j dapat dibeli dari Konduit, yang juga mendukung banyak pengembang yang mengerjakan proyek tersebut.

Bagaimana Deeplearning4j bekerja

Deeplearning4j memperlakukan tugas memuat data dan melatih algoritme sebagai proses terpisah. Anda memuat dan mengubah data menggunakan library DataVec, dan melatih model menggunakan tensor dan library ND4J.

Anda menyerap data melalui RecordReaderantarmuka, dan menelusuri data menggunakan file RecordReaderDataSetIterator. Anda dapat memilih DataNormalizationkelas untuk digunakan sebagai preprocessor untuk Anda DataSetIterator. Gunakan ImagePreProcessingScaleruntuk data gambar, NormalizerMinMaxScalerjika Anda memiliki rentang seragam di sepanjang semua dimensi data masukan Anda, dan NormalizerStandardizeuntuk sebagian besar kasus lainnya. Jika perlu, Anda dapat menerapkan DataNormalizationkelas khusus .

DataSetobjek adalah wadah untuk fitur dan label data Anda, dan menyimpan nilai dalam beberapa contoh INDArray: satu untuk fitur contoh Anda, satu untuk label, dan dua tambahan untuk masking, jika Anda menggunakan data deret waktu. Dalam kasus fitur, itu INDArrayadalah tensor ukuran Number of Examples x Number of Features. Biasanya Anda akan membagi data menjadi kelompok-kelompok mini untuk pelatihan; jumlah contoh dalam an INDArraycukup kecil untuk muat dalam memori tetapi cukup besar untuk mendapatkan gradien yang baik.

Jika Anda melihat kode Deeplearning4j untuk menentukan model, seperti contoh Java di bawah ini, Anda akan melihat bahwa itu adalah API tingkat sangat tinggi, mirip dengan Keras. Nyatanya, antarmuka Python yang direncanakan ke Deeplearning4j akan menggunakan Keras; sekarang, jika Anda memiliki model Keras, Anda dapat mengimpornya ke Deeplearning4j.

MultiLayerConfiguration conf =

    NeuralNetConfiguration.Builder () baru

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (Nesterovs baru (learningRate, 0.9))

        .daftar(

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

            OutputLayer.Builder baru (LossFunction.NEGATIVELOGLIKELIHOOD).

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

        ) .backprop (true) .build ();

The MultiLayerNetworkkelas adalah yang paling sederhana konfigurasi jaringan API yang tersedia di Eclipse Deeplearning4j; untuk struktur DAG, gunakan file ComputationGraph. Perhatikan bahwa algoritma pengoptimalan (SGD dalam contoh ini) ditentukan secara terpisah dari pembaru (Nesterov dalam contoh ini). Jaringan saraf yang sangat sederhana ini memiliki satu lapisan padat dengan ReLUfungsi aktivasi dan satu lapisan keluaran dengan fungsi -log(likelihood)kehilangan dan softmaxaktivasi, dan diselesaikan dengan propagasi balik. Lebih jaringan yang kompleks mungkin juga memiliki GravesLSTM, ConvolutionLayer, EmbeddingLayer, dan lain-lain dari dua lusin didukung jenis lapisan dan enam belas jenis ruang lapisan.

Cara termudah untuk melatih model adalah dengan memanggil .fit()metode pada konfigurasi model dengan DataSetIteratorargumen Anda. Anda juga dapat menyetel ulang iterator dan memanggil .fit()metode untuk epoch sebanyak yang Anda butuhkan, atau menggunakan EarlyStoppingTrainer.

Untuk menguji performa model, gunakan Evaluationkelas untuk melihat seberapa cocok model yang dilatih dengan data pengujian Anda, yang tidak boleh sama dengan data pelatihan.

Deeplearning4j menyediakan fasilitas pendengar yang membantu Anda memantau kinerja jaringan Anda secara visual, yang akan dipanggil setelah setiap batch mini diproses. Salah satu pendengar yang paling sering digunakan adalah ScoreIterationListener.

Menginstal dan menguji Deeplearning4j

At the moment, the easiest way to try out Deeplearning4j is by using the official quick start. It requires a relatively recent version of Java, an installation of Maven, a working Git, and a copy of IntelliJ IDEA (preferred) or Eclipse. There are also a few user-contributed quick starts. Start by cloning the eclipse/deeplearning4j-examples repo to your own machine with Git or GitHub Desktop. Then install the projects with Maven from the dl4j-examples folder.

[email protected] dl4j-examples % mvn clean install

[INFO] Scanning for projects...

[WARNING]

[WARNING] Some problems were encountered while building the effective model for org.deeplearning4j:dl4j-examples:jar:1.0.0-beta7

[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-compiler-plugin @ line 250, column 21

[WARNING]

[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.

[WARNING]

[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.

[WARNING]

[INFO]

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

[INFO] Building Introduction to 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.