Deeplearning4j: Дълбоко обучение и ETL за JVM

Eclipse Deeplearning4j е библиотека с отворен код, разпределена, задълбочена библиотека за JVM. Deeplearning4j е написан на Java и е съвместим с всеки език на JVM, като Scala, Clojure или Kotlin. Основните изчисления са написани на C, C ++ и Cuda. Keras ще служи като API на Python. Интегриран с Hadoop и Apache Spark, Deeplearning4j носи AI в бизнес среди за използване на разпределени графични процесори и процесори.

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 с отворен код, разпределена платформа за машинно обучение в памет с Spark. H2O има интерфейси за преносими компютри Java и Scala, Python, R и H2O Flow.

Търговска поддръжка за Deeplearning4j може да бъде закупена от Konduit, който също подкрепя много от разработчиците, работещи по проекта.

Как работи Deeplearning4j

Deeplearning4j третира задачите за зареждане на данни и алгоритми за обучение като отделни процеси. Зареждате и трансформирате данните с помощта на библиотеката DataVec и обучавате модели, използвайки тензори и библиотеката ND4J.

Поглъщате данни през RecordReaderинтерфейс и преминавате през данните с помощта на RecordReaderDataSetIterator. Можете да изберете DataNormalizationклас, който да използвате като препроцесор за вашия DataSetIterator. Използвайте ImagePreProcessingScalerза данни за изображения, NormalizerMinMaxScalerако имате еднакъв обхват по всички измерения на входящите данни, както и NormalizerStandardizeза повечето други случаи. Ако е необходимо, можете да внедрите персонализиран DataNormalizationклас.

DataSetобектите са контейнери за характеристиките и етикетите на вашите данни и съхраняват стойностите в няколко случая на INDArray: един за характеристиките на вашите примери, един за етикетите и два допълнителни за маскиране, ако използвате данни от времеви редове. В случая на характеристиките, INDArrayе тензор на размера Number of Examples x Number of Features. Обикновено ще разделите данните на мини партиди за обучение; броят на примерите в an INDArrayе достатъчно малък, за да се побере в паметта, но достатъчно голям, за да се получи добър градиент.

Ако погледнете кода Deeplearning4j за дефиниране на модели, като например примера Java по-долу, ще видите, че това е API на много високо ниво, подобно на Keras. Всъщност планираният интерфейс на Python към Deeplearning4j ще използва Keras; точно сега, ако имате модел на Keras, можете да го импортирате в Deeplearning4j.

MultiLayerConfiguration conf =

    нов NeuralNetConfiguration.Builder ()

        .optimizationAlgo (OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater (нови Nesterovs (learningRate, 0.9))

        .list (

            нов DenseLayer.Builder (). nIn (numInputs) .nOut (numHiddenNodes) .activation ("relu"). build (),

            нов OutputLayer.Builder (LossFunction.NEGATIVELOGLIKELIHOOD).

                  активиране ("softmax"). nIn (numHiddenNodes) .nOut (numOutputs) .build ()

        ) .backprop (вярно) .build ();

В MultiLayerNetworkклас е най-простият конфигурация API мрежа на разположение в Eclipse Deeplearning4j; за DAG структури използвайте ComputationGraphвместо това. Обърнете внимание, че алгоритъмът за оптимизация (SGD в този пример) е посочен отделно от актуализатора (Нестеров в този пример). Тази много проста невронна мрежа има един плътен слой с ReLUактивираща функция и един изходен слой със -log(likelihood)загуба и softmaxактивираща функция и се решава чрез обратно разпространение. По-сложните мрежи също могат да имат GravesLSTM, ConvolutionLayer, EmbeddingLayer, и други, от две дузини поддържаните типове слой и шестнадесет видове слой космически.

Най-простият начин за обучение на модела е да извикате .fit()метода в конфигурацията на модела с ваш DataSetIteratorкато аргумент. Можете също така да нулирате итератора и да извикате .fit()метода за толкова епохи, колкото са ви необходими, или да използвате EarlyStoppingTrainer.

За да тествате ефективността на модела, използвайте Evaluationклас, за да видите колко добре обученият модел отговаря на вашите тестови данни, които не трябва да са същите като данните за обучение.

Deeplearning4j предоставя средство за слушане, което ви помага да наблюдавате визуално производителността на вашата мрежа, което ще бъде извикано след обработката на всяка мини-партида. Един от най-често използваните слушатели е ScoreIterationListener.

Инсталиране и тестване на Deeplearning4j

В момента най-лесният начин да изпробвате Deeplearning4j е като използвате официалния бърз старт. Изисква сравнително нова версия на Java, инсталация на Maven, работещ Git и копие на IntelliJ IDEA (за предпочитане) или Eclipse. Има и няколко стартирани от потребителя бързи стартове. Започнете с клониране на репо за eclipse / deeplearning4j-examples към вашата собствена машина с Git или GitHub Desktop. След това инсталирайте проектите с Maven от папката dl4j-examples.

martinheller @ Martins-Retina-MacBook dl4j-примери% mvn чиста инсталация

[ INFO ] Сканиране за проекти ...

[ ПРЕДУПРЕЖДЕНИЕ ]

[ ПРЕДУПРЕЖДЕНИЕ ] При създаването на ефективния модел за org.deeplearning4j: dl4j-examples: jar: 1.0.0-beta7 са възникнали някои проблеми

[ ПРЕДУПРЕЖДЕНИЕ ] 'build.plugins.plugin. (GroupId: artifactId)' трябва да е уникален, но да е намерена дублирана декларация на плъгин org.apache.maven.plugins: maven-compiler-plugin @ line 250, колона 21

[ ПРЕДУПРЕЖДЕНИЕ ]

[ ПРЕДУПРЕЖДЕНИЕ ] Силно се препоръчва да отстраните тези проблеми, защото те застрашават стабилността на вашата компилация.

[ ПРЕДУПРЕЖДЕНИЕ ]

[ ПРЕДУПРЕЖДЕНИЕ ] По тази причина бъдещите версии на Maven може вече да не поддържат изграждането на такива деформирани проекти.

[ ПРЕДУПРЕЖДЕНИЕ ]

[ ИНФОРМАЦИЯ ]

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

[ INFO ] Въведение в изграждането на 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.