Deeplearning4j:JVMのディープラーニングとETL

Eclipse Deeplearning4jは、JVM用のオープンソースの分散型ディープラーニングライブラリです。Deeplearning4jはJavaで記述されており、Scala、Clojure、KotlinなどのJVM言語と互換性があります。基礎となる計算は、C、C ++、およびCudaで記述されています。KerasはPythonAPIとして機能します。Deeplearning4jはHadoopおよびApacheSparkと統合されており、分散GPUおよびCPUで使用するためにAIをビジネス環境にもたらします。

Deeplearning4jは、実際には、JVMベースのディープラーニングアプリケーションのすべてのニーズをサポートすることを目的としたプロジェクトのスタックです。Deeplearning4j自体(高レベルAPI)の他に、ND4J(汎用線形代数)、SameDiff(グラフベースの自動微分)、DataVec(ETL)、Arbiter(ハイパーパラメーター検索)、およびC ++ LibND4J(すべてをサポート)が含まれています。上記の)。LibND4Jは、OpenBLAS、OneDNN(MKL-DNN)、cuDNN、cuBLASなどのCPUおよびGPUサポート用の標準ライブラリを順番に呼び出します。

Eclipse Deeplearning4jの目標は、AIを組み込んだアプリケーションを構築するためのコンポーネントのコアセットを提供することです。企業内のAI製品は、多くの場合、単なる機械学習よりも広い範囲を持っています。ディストリビューションの全体的な目標は、ディープラーニングアプリケーションを構築するためのスマートなデフォルトを提供することです。

Deeplearning4jは、あるレベルで、他のすべてのディープラーニングフレームワークと競合します。スコープ内で最も比較可能なプロジェクトはTensorFlowです。これは、本番環境向けの主要なエンドツーエンドのディープラーニングフレームワークです。TensorFlowには現在、Python、C ++、Java(実験的)のインターフェースと、JavaScriptの個別の実装があります。TensorFlowは、グラフベースと即時モード(熱心な実行)の2つのトレーニング方法を使用します。Deeplearning4jは現在、グラフベースの実行のみをサポートしています。

おそらく研究のための主要な深層学習フレームワークであるPyTorchは、即時モードのみをサポートします。Python、C ++、およびJava用のインターフェースがあります。H2O Sparkling Waterは、H2Oオープンソースの分散型インメモリ機械学習プラットフォームをSparkと統合します。H2Oには、JavaとScala、Python、R、およびH2OFlowノートブック用のインターフェースがあります。

Deeplearning4jの商用サポートは、プロジェクトに取り組んでいる多くの開発者もサポートしているKonduitから購入できます。

Deeplearning4jのしくみ

Deeplearning4jは、データの読み込みとアルゴリズムのトレーニングのタスクを別々のプロセスとして扱います。DataVecライブラリを使用してデータをロードおよび変換し、テンソルとND4Jライブラリを使用してモデルをトレーニングします。

介してデータ取り込みあなたRecordReaderインタフェース、および使用してデータを歩きますRecordReaderDataSetIterator。のDataNormalizationプリプロセッサとして使用するクラスを選択できますDataSetIterator。使用しImagePreProcessingScaler、画像データのためにNormalizerMinMaxScaler、あなたの入力データの全ての次元に沿って均一な範囲を持っている、とあればNormalizerStandardize、他のほとんどのケースのために。必要に応じて、カスタムDataNormalizationクラスを実装できます。

DataSetオブジェクトはデータの特徴とラベルのコンテナであり、INDArray時系列データを使用している場合は、例の特徴用に1つ、ラベル用に1つ、マスキング用に2つの追加のインスタンスの値を保持します。特徴の場合、INDArrayはサイズのテンソルですNumber of Examples x Number of Features。通常、トレーニング用にデータをミニバッチに分割します。の例の数はINDArray、メモリに収まるほど少ないですが、適切なグラデーションを取得するのに十分な数です。

以下のJavaの例のように、モデルを定義するためのDeeplearning4jコードを見ると、Kerasに似た非常に高レベルのAPIであることがわかります。実際、Deeplearning4jへの計画されたPythonインターフェースはKerasを使用します。現在、Kerasモデルをお持ちの場合は、Deeplearning4jにインポートできます。

MultiLayerConfiguration conf =

    新しいNeuralNetConfiguration.Builder()

        .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)

        .updater(new Nesterovs(learningRate、0.9))

        。リスト(

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

            新しいOutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD)。

                  Activation( "softmax")。nIn(numHiddenNodes).nOut(numOutputs).build()

        ).backprop(true).build();

このMultiLayerNetworkクラスは、EclipseDeeplearning4jで利用できる最も単純なネットワーク構成APIです。 DAG構造の場合は、ComputationGraph代わりに使用してください。最適化アルゴリズム(この例ではSGD)は、アップデーター(この例ではNesterov)とは別に指定されていることに注意してください。この非常に単純なニューラルネットワークには、ReLU活性化関数を備えた1つの高密度層と、-log(likelihood)損失とsoftmax活性化関数を備えた1つの出力層があり、逆伝播によって解決されます。より複雑なネットワークも持っていることがGravesLSTMConvolutionLayerEmbeddingLayer、および2ダースサポート層の種類と16層空間タイプの他。

モデルをトレーニングする最も簡単な方法は、引数として.fit()モデル構成のメソッドを呼び出すDataSetIteratorことです。イテレータをリセットして、.fit()必要な数のエポックに対してメソッドを呼び出すか、を使用することもできますEarlyStoppingTrainer

モデルのパフォーマンスをテストするには、Evaluationクラスを使用して、トレーニングされたモデルがテストデータにどの程度適合しているかを確認します。これは、トレーニングデータと同じであってはなりません。

Deeplearning4jは、ネットワークのパフォーマンスを視覚的に監視するのに役立つリスナー機能を提供します。これは、各ミニバッチが処理された後に呼び出されます。最も頻繁に使用されるリスナーの1つはScoreIterationListenerです。

Deeplearning4jのインストールとテスト

現時点では、Deeplearning4jを試す最も簡単な方法は、公式のクイックスタートを使用することです。比較的新しいバージョンのJava、Mavenのインストール、動作するGit、およびIntelliJ IDEA(推奨)またはEclipseのコピーが必要です。ユーザーが投稿したクイックスタートもいくつかあります。eclipse / deeplearning4j-examplesリポジトリをGitまたはGitHubデスクトップを使用して独自のマシンに複製することから始めます。次に、dl4j-examplesフォルダーからMavenを使用してプロジェクトをインストールします。

martinheller @ Martins-Retina-MacBook dl4j-examples%mvn clean install

[情報]プロジェクトをスキャンしています...

[警告]

[警告] org.deeplearning4j:dl4j-examples:jar:1.0.0-beta7の効果的なモデルの構築中にいくつかの問題が発生しました

[警告] 'build.plugins.plugin。(groupId:artifactId)'は一意である必要がありますが、プラグインorg.apache.maven.plugins:maven-compiler-plugin @行250、列21の重複宣言が見つかりました

[警告]

[警告]これらの問題はビルドの安定性を脅かすため、修正することを強くお勧めします。

[警告]

[警告]このため、将来のMavenバージョンでは、このような不正な形式のプロジェクトのビルドがサポートされなくなる可能性があります。

[警告]

[情報]

[情報] ------------------ < org.deeplearning4j:dl4j-例> ------------------

[情報] DL4J1.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.