Deeplearning4j: Pembelajaran mendalam dan ETL untuk JVM

Eclipse Deeplearning4j adalah sumber terbuka, diedarkan, perpustakaan pembelajaran mendalam untuk JVM. Deeplearning4j ditulis dalam Java dan serasi dengan bahasa JVM apa pun, seperti Scala, Clojure, atau Kotlin. Pengiraan asas ditulis dalam C, C ++, dan Cuda. Keras akan berfungsi sebagai Python API. Bersepadu dengan Hadoop dan Apache Spark, Deeplearning4j membawa AI ke persekitaran perniagaan untuk digunakan pada GPU dan CPU yang diedarkan.

Deeplearning4j sebenarnya adalah tumpukan projek yang bertujuan untuk memenuhi semua keperluan aplikasi pembelajaran mendalam berasaskan JVM. Di luar Deeplearning4j sendiri (API tahap tinggi), ia merangkumi ND4J (aljabar linear tujuan umum,), SameDiff (pembezaan automatik berasaskan grafik), DataVec (ETL), Arbiter (carian hyperparameter), dan C ++ LibND4J (menyokong semua perkara di atas). LibND4J secara gilirannya memanggil perpustakaan standard untuk sokongan CPU dan GPU, seperti OpenBLAS, OneDNN (MKL-DNN), cuDNN, dan cuBLAS.

Matlamat Eclipse Deeplearning4j adalah untuk menyediakan sekumpulan komponen teras untuk membina aplikasi yang menggabungkan AI. Produk AI dalam perusahaan sering mempunyai ruang lingkup yang lebih luas daripada sekadar pembelajaran mesin. Tujuan keseluruhan pengedaran adalah untuk menyediakan default pintar untuk membina aplikasi pembelajaran mendalam.

Deeplearning4j bersaing, pada tahap tertentu, dengan setiap kerangka pembelajaran mendalam yang lain. Skop projek yang paling setanding adalah TensorFlow, yang merupakan kerangka pembelajaran mendalam akhir-ke-akhir yang terkemuka untuk pengeluaran. TensorFlow kini mempunyai antara muka untuk Python, C ++, dan Java (eksperimental), dan implementasi yang terpisah untuk JavaScript. TensorFlow menggunakan dua cara latihan: mod berdasarkan grafik dan mod segera (pelaksanaan bersemangat). Deeplearning4j pada masa ini hanya menyokong pelaksanaan berasaskan grafik.

PyTorch, mungkin kerangka pembelajaran mendalam untuk penyelidikan, hanya menyokong mod segera; ia mempunyai antara muka untuk Python, C ++, dan Java. H2O Sparkling Water mengintegrasikan sumber terbuka H2O, platform pembelajaran mesin dalam memori yang diedarkan dengan Spark. H2O mempunyai antara muka untuk buku nota Java dan Scala, Python, R, dan H2O Flow.

Sokongan komersial untuk Deeplearning4j boleh dibeli dari Konduit, yang juga menyokong banyak pembangun yang mengerjakan projek ini.

Bagaimana Deeplearning4j berfungsi

Deeplearning4j memperlakukan tugas memuat data dan algoritma latihan sebagai proses yang berasingan. Anda memuat dan mengubah data menggunakan perpustakaan DataVec, dan melatih model menggunakan tensor dan perpustakaan ND4J.

Anda mengambil data melalui RecordReaderantara muka, dan melalui data menggunakan a RecordReaderDataSetIterator. Anda boleh memilih DataNormalizationkelas untuk digunakan sebagai praprosesor untuk anda DataSetIterator. Gunakan ImagePreProcessingScaleruntuk data gambar, NormalizerMinMaxScalerjika anda mempunyai rentang yang seragam sepanjang semua dimensi data input anda, dan NormalizerStandardizeuntuk kebanyakan kes lain. Sekiranya perlu, anda boleh melaksanakan DataNormalizationkelas khusus .

DataSetobjek adalah bekas untuk ciri dan label data anda, dan simpan nilai dalam beberapa contoh INDArray: satu untuk ciri contoh anda, satu untuk label, dan dua tambahan untuk penyamaran, jika anda menggunakan data siri masa. Bagi ciri-ciri, ini INDArrayadalah tensor ukuran Number of Examples x Number of Features. Biasanya anda akan membahagikan data menjadi kumpulan kecil untuk latihan; bilangan contoh dalam INDArraycukup kecil untuk dimasukkan dalam memori tetapi cukup besar untuk mendapatkan kecerunan yang baik.

Sekiranya anda melihat kod Deeplearning4j untuk menentukan model, seperti contoh Java di bawah, anda akan melihat bahawa ia adalah API tahap sangat tinggi, serupa dengan Keras. Sebenarnya, antara muka Python yang dirancang untuk Deeplearning4j akan menggunakan Keras; sekarang, jika anda mempunyai model Keras, anda boleh mengimportnya ke Deeplearning4j.

MultiLayerConfiguration conf =

    NeuralNetConfiguration.Builder baru ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (Nesterovs baru (LearningRate, 0.9))

        senarai. (

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

            OutputLayer.Builder baru (LossFunction.NEGATIVELOGLIKELIHOOD).

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

        ) .backprop (true) .build ();

The MultiLayerNetworkkelas adalah API konfigurasi rangkaian yang paling mudah didapati di Eclipse Deeplearning4j; untuk struktur DAG, gunakan sebagai ComputationGraphgantinya. Perhatikan bahawa algoritma pengoptimuman (SGD dalam contoh ini) ditentukan secara berasingan dari updater (Nesterov dalam contoh ini). Rangkaian saraf yang sangat sederhana ini mempunyai satu lapisan padat dengan ReLUfungsi pengaktifan dan satu lapisan output dengan fungsi -log(likelihood)kehilangan dan softmaxpengaktifan, dan diselesaikan dengan penyebaran belakang. Lebih rangkaian kompleks juga mungkin mempunyai GravesLSTM, ConvolutionLayer, EmbeddingLayer, dan lain-lain daripada dua dozen disokong jenis lapisan dan enam belas jenis ruang lapisan.

Cara termudah untuk melatih model adalah dengan memanggil .fit()kaedah pada konfigurasi model dengan anda DataSetIteratorsebagai argumen. Anda juga boleh menetapkan semula iterator dan memanggil .fit()kaedah untuk seberapa banyak zaman yang anda perlukan, atau menggunakan EarlyStoppingTrainer.

Untuk menguji prestasi model, gunakan Evaluationkelas untuk melihat seberapa baik model terlatih sesuai dengan data ujian anda, yang seharusnya tidak sama dengan data latihan.

Deeplearning4j menyediakan kemudahan pendengar yang membantu anda memantau prestasi rangkaian anda secara visual, yang akan dipanggil setelah setiap kumpulan mini diproses. Salah satu pendengar yang paling kerap digunakan adalah ScoreIterationListener.

Memasang dan menguji Deeplearning4j

Pada masa ini, cara termudah untuk mencuba Deeplearning4j adalah dengan menggunakan permulaan cepat rasmi. Ia memerlukan versi Java yang agak baru, pemasangan Maven, Git yang berfungsi, dan salinan IntelliJ IDEA (lebih disukai) atau Eclipse. Terdapat juga beberapa permulaan cepat yang disumbangkan oleh pengguna. Mulakan dengan mengklon repo eclipse / deeplearning4j-samples ke mesin anda sendiri dengan Git atau GitHub Desktop. Kemudian pasang projek dengan Maven dari folder contoh dl4j.

martinheller @ Martins-Retina-MacBook dl4j-contoh% mvn bersih memasang

[ INFO ] Mengimbas projek ...

[ AMARAN ]

[ PERINGATAN ] Beberapa masalah dihadapi semasa membina model yang berkesan untuk org.deeplearning4j: dl4j-contoh: jar: 1.0.0-beta7

[ PERINGATAN ] 'build.plugins.plugin. (GroupId: artifactId)' mestilah unik tetapi dijumpai pendua pendua plugin org.apache.maven.plugins: maven-compiler-plugin @ baris 250, lajur 21

[ AMARAN ]

[ PERINGATAN ] Sangat disarankan untuk menyelesaikan masalah ini kerana ia mengancam kestabilan bangunan anda.

[ AMARAN ]

[ PERINGATAN ] Atas sebab ini, versi Maven yang akan datang mungkin tidak lagi menyokong pembinaan projek yang salah bentuknya.

[ AMARAN ]

[ INFO ]

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

[ INFO ] Pengenalan Bangunan kepada 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.