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

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

[[410828]]

この記事はWeChatの公開アカウント「Java Architecture Master」から転載したもので、著者はJava Architecture Masterです。この記事を転載する場合は、Java Architecture Master の公開アカウントにお問い合わせください。

Deeplearning4j はモデルを Java アプリケーションと統合するように設計されており、AI を組み込んだ JVM ベースのアプリケーションを構築するためのコンポーネント セットを提供します。

Eclipse Deeplearning4j は、JVM 用のオープン ソースの分散型ディープラーニング ライブラリです。 Deeplearning4j は Java で記述されており、Scala、Clojure、Kotlin などのあらゆる JVM 言語と互換性があります。基礎となる計算は C、C++、Cuda で記述されています。 Python API として Keras が使用されます。 Deeplearning4j は Hadoop および Apache Spark と統合し、分散 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 は、グラフベースと Eager 実行という 2 つのトレーニング方法を使用します。 Deeplearning4j は現在、グラフベースの実行のみをサポートしています。

おそらく最先端のディープラーニング研究フレームワークである PyTorch は、即時モードのみをサポートしており、Python、C++、Java 用のインターフェースを備えています。 H2O Sparkling Water は、H2O オープンソース分散型インメモリ機械学習プラットフォームを Spark と統合します。 H2O には、Java および Scala、Python、R、および H2O Flow ノートブック用のインターフェースがあります。

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

Deeplearning4jの仕組み

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

RecordReader インターフェイスを介してデータを取り込み、RecordReaderDataSetIterator を使用します。DataSetIterator として DataNormalization クラスを選択できます。画像データを操作する場合は ImagePreProcessingScaler を使用し、入力データのすべての次元にわたって均一な範囲がある場合は NormalizerMinMaxScaler を使用し、その他のほとんどのケースでは NormalizerStandardize を使用します。必要に応じて、カスタム DataNormalization クラスを実装できます。

DataSet オブジェクトは、データの機能とラベルのコンテナであり、INDArray の複数のインスタンスに値を保持します。1 つは例の機能用、1 つはラベル用、さらに 2 つはマスク用です (時系列データで作業している場合)。特徴の場合、INDArray は、例の数 x 特徴の数のサイズのテンソルです。通常、トレーニングのためにデータをミニバッチに分割します。INDArray 内のサンプルの数は、メモリに収まるほど小さいですが、適切な勾配を得るには十分な大きさです。

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

  1. MultiLayerConfiguration conf = 新しい NeuralNetConfiguration。ビルダー()。最適化アルゴ (最適化アルゴリズム . STOCHASTIC_GRADIENT_DESCENT)。手順を更新しました(新しい Nesterovs (learningRate、0.9))。 List(新しい DenseLayer . Builder() ). nIn(​​numInputs ). nOut(numHiddenNodes ). Activation("ReLU" ).
  2.                        
  3.          
  4. Build()、新しい出力レイヤー。ビルダー ( LossFunction . NEGATIVELOGLIKELIHOOD )。アクティベーション(「ソフトマックス」)。 (numHiddenNodes) 内の n。 nOut (出力数)。建てる() )。バックプロパゲーション(True)。建てる();
  5.               
  6.  
  7.          

MultiLayerNetwork クラスは、Eclipse Deeplearning4j で使用できる最もシンプルなネットワーク構成 API です。DAG 構造の場合は、代わりに ComputationGraph を使用してください。最適化アルゴリズム (この場合は SGD) は、アップデータ (この場合は Nesterov) とは別に指定されることに注意してください。この非常に単純なニューラル ネットワークには、ReLU 活性化関数を持つ 1 つの密な層と、-log(尤度) 損失とソフトマックス活性化関数を持つ 1 つの出力層があり、バックプロパゲーションによって解決されます。より複雑なネットワークには、GravesLSTM、ConvolutionLayer、EmbeddingLayer、および 24 種類と 16 種類の空間タイプのその他のサポートされているレイヤー タイプも含まれる場合があります。

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

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

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

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

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

  1. martinheller@martins-retina-macbook dl4j-example %mvn クリーンインストール
  2. [ 情報 ] アイテムをスキャンしています... [ 警告 ] [ 警告 ] 組織に効率的なスキーマを作成中にセクションで問題が発生しました。 deeplearning4j:dl4j-examples:jar:1.0。 0 - beta7 [警告]
  3.  
  4.   
  5. 'build.plugins.plugin.(groupId:artifactId)' は一意である必要がありますが、プラグイン組織の重複した宣言が見つかりました。アパッチ。専門家。プラグイン: maven-compile-plugin @ 行 250、列 21
  6. [ 警告 ]
  7. [警告] これらの問題はビルドの安定性を脅かすため、修正することを強くお勧めします。 [警告] [警告]このため、今後
  8.  
  9. Maven のバージョンでは、このような不正なプロジェクトのビルドがサポートされなくなる可能性があります。
  10. [警告]
  11. [情報]
  12. [INFO] ------------------<Org. deeplearning4j : dl4j - 例 >----------------- [INFO] DL4J 1.0 のビルドの概要。 0 - beta7 [ INFO ] --------------------------------[ jar ]--------- ------------------------ダウンロード先 
  13.    
  14.   
  15. セントラル: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.pom (セントラルより)
  16. ダウンロード: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.pom (4.4 kB/s6.5 kB ) セントラルからダウンロード: https://repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom セントラルからダウンロード: https://repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom
  17.   
  18. //repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/1.0.1/enforcer-1.0.1.pom (11 kB 137 kB/s) 中央から
  19. ダウンロード: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/1.0.1/maven-enforcer-plugin-1.0.1.jar セントラルからダウンロード: https://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/)セントラルからダウンロード: https://repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom
  20.   
  21.   
  22. 中央から:https://repo.maven.apache.org/maven2/org/codehaus/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom haus/mojo / exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.jarセントラルからダウンロード:https://repo.maven.apache.org/maven2/org 4 kb/s)セントラルからダウンロード:https //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
  23.   
  24.   
  25. //repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom 中央から
  26. ダウンロード: https://repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.pom (19 kB 430 kB/秒) セントラルからダウンロード: https://repo.maven.apache.org/maven2/com/lewisd/lint-maven-plugin/0.0.11/lint-maven-plugin-0.0.11.jar セントラルからダウンロード: https://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/秒) セントラルからダウンロード
  27.   
  28.   
  29. : https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.pom
  30.  
  31. ...
  32.  
  33. [警告] - org.agrona.収集品。ハッシュ[警告] - org.アグロナ。収集品。 Long2ObjectCache$ValueIterator [警告] -org.アグロナ。収集品。 Int2ObjectHashMap$EntrySet [警告] -
  34.     
  35.     
  36. 整理する。アグロナ。同時。スリーピングアイドル戦略
  37. [警告] - org.アグロナ。収集品。 MutableInteger [警告] - org.アグロナ。収集品。 Int2IntHashMap [警告] - org.アグロナ。収集品。 IntIntConsumer 【警告】-組織。アグロナ。同時に
  38.     
  39.     
  40. 。 州。ステータスインジケーター
  41. [警告] - 175 以上... [警告] javafx-base-14-mac。 jar、javafx-graphics-14-mac。ジャー、ジャカルタ。 。バインディング - API - 2.3。 2.jar は 1 つの重複クラスを定義します: [警告]
  42.  
  43. --module-info [警告] protobuf-1.0。 0 - β7。ジャー、グアバ - 19.0 。 jar は 3 つの重複するクラスを定義します: [警告] - COM。グーグル。第三者。公的な接尾辞。 TrieParser [警告] - com.グーグル。第三者。公的な接尾辞。
  44.  
  45.     
  46. パブリックサフィックスパターン
  47. [警告] - com.グーグル。第三者。公的な接尾辞。 PublicSuffixType [ 警告 ] JSR305-3.0 。 2.jar、guava-1.0。 0 - β7。 jar は 35 個の重複するクラスを定義します: [警告] -javax.メモ。正規表現 [警告] - javax
  48.  
  49.     
  50. . コメント。同時。不変
  51. [警告] - javax.メモ。元。 TypeQualifierDefault [警告] - javax.メモ。元。 TypeQualifier [警告] - javax.メモ。構文 [警告] - javax.メモ。戻り値を確認してください [警告]
  52.     
  53.     
  54.     
  55. -javax.メモ。 Null チェック
  56. [警告] - javax.メモ。 null 以外 [警告] - javax.メモ。元。 TypeQualifierNickname [警告] - javax.メモ。 MatchesPattern [警告] - 25 件以上... [警告] maven -shade-
  57.     
  58.     
  59.      
  60. プラグインは特定のクラスファイルを検出します
  61. [警告] 2 つ以上の JAR に存在します。このような場合、クラスの 1 つのバージョンのみが uber-jar にコピーされます。 [警告] 通常、これは無害なのでスキップできます。[警告] それ以外の場合は、手動でアーティファクトを除去してください。
  62.   
  63.      
  64.  
  65. [警告] mvn dependency:tree-Ddetail= trueと上記の出力。 [警告] http://maven.apache.org/plugins/maven-shade-plugin/ [INFO] を参照してください。シャドウアーティファクトを添付します。 [ 情報 ] [ 情報 ] --- maven-install-plugin:2.4:install (default-install) @  
  66.   
  67.   
  68.  
  69. dl4j-instance --- [INFO] /Volume/data/repos/deeplearning4j-instance/dl4j-instance/target/dl4j-instance-1.0 をインストールしました。 0 - β7。 jar を /Users/martinheller/ にコピーします。 m2/リポジトリ/org/deeplearning4j/dl4j -  
  70. 例/1.0。 0-カテニン-beta7/dl4j-examples-1.0。 0 - β7。瓶
  71. [INFO] /Volumes/data/repos/deeplearning4j-examples/dl4j-examples/pom をインストールしています。 xml を /Users/martinheller/ にアップロードします。 m2/repositories/org/deeplearning4j/dl4j-examples/1.0.0-catenin-beta7/dl4j-examples-1.0。 0 - β7。ポム
  72. [INFO] /Volume/data/repos/deeplearning4j-examples/dl4j-examples/target/dl4j-examples-1.0 をインストールしました。 0 - ベータ7 - シャドウ。 jar を /Users/martinheller/ にコピーします。 m2/repository/org/deeplearning4j/dl4j-examples/1.0 です。 0-カテニン-beta7/dl4j-examples-1.0。 0 - β7 - シャドウ。瓶
  73. [情報] ---------------------------------------------- -------------------------- [情報]  
  74. 成功を築く
  75. [INFO] ------------------------------------------- ------------------------------ [ INFO ]合計時間: 05:07 分 [ INFO ]完了時間: 2020-07-10T10:58:55-04:00 [INFO] ----------------------------------------- ------------------------------- martinheller@Martins - Retina - MacBook dl4j  
  76.     
  77.    
  78.   
  79. -例%

インストールしたら、IntelliJ IDEA で dl4j-examples/ ディレクトリを開き、いくつかの例を実行してみてください。

dl4j-examples の README には、すべての例がリストされ、簡単に説明されています。ちなみに、IntelliJ IDEA の設定を使用して、新しいバージョンの JDK をインストールし、プロジェクトに適用することができます。

有名なアイリス データ セットには 150 個の例しかなく、一部のアイリスは誤分類されることが多いものの、一般的にはモデル化が容易です。ここで使用されるモデルは、3 層の高密度ニューラル ネットワークです。

上記の Iris 分類器を実行すると、かなり良好な適合が得られ、精度、精度、再現率、F1 スコアはすべて約 98% になります。混同マトリックスでは、1 つのテスト ケースのみが誤分類されていることに注意してください。

線形分類器のデモは数秒で実行され、トレーニング データセットとテスト データセットの両方の確率プロットを生成します。データは、2 つのカテゴリに線形に分離できるように特別に生成されました。

MNIST 手書き数字データセットの多層パーセプトロン (MLP) 分類モデルは、約 14,000 回の反復後に約 97% の精度、適合率、再現率、F1 スコアを生成しました。これは、このデータセットにおける LeNet などの畳み込みニューラル ネットワークの結果ほど優れておらず、また、それほど高速でもありません。

Deeplearning4j パフォーマンス

Java プログラムのベンチマークは難しい場合があります。特に、JIT コンパイラのオーバーヘッドを排除するために、時間を計測する前にコードをウォームアップする必要があり、ベンチマークするプログラムに対して JVM に十分な RAM が構成されていることを確認する必要があります。 Deeplearning4j コミュニティは、さまざまな一般的なモデルと構成のベンチマーク コードのリポジトリを管理しています。

開発者によると、Deeplearning4j は、複数の GPU を使用した重要な画像認識タスクでは Caffe と同等の速度です。複数のマシンを使用する場合は、SparkでDeeplearning4jを実行できます。

Java アプリケーションのためのディープラーニング

全体として、Deeplearning4j は、データの読み込みと調整、および Java VM 上でのディープラーニングの実行に役立つライブラリです。 Deeplearning4j はまだ TensorFlow や PyTorch ほど成熟していませんが、ディープラーニング モデルを Java ベースのアプリケーションに統合したいデータ サイエンティストにとって魅力的です。 Deeplearning4j は Keras モデルをインポートできるため、TensorFlow から切り替えたい場合の移行が容易になります。

Deeplearning4j は、TensorFlow 1 と同様に、グラフの作成と実行をサポートしています。 TensorFlow 2 や PyTorch のような Eager モード トレーニングはサポートされていません。これは本番環境では重要ではありませんが、研究目的で Deeplearning4j を使用することの魅力が低下する可能性があります。

Deeplearning4j には現在、パラメータ平均化と勾配共有という 2 つの分散トレーニング メカニズムがあります。後者の方がはるかに望ましいですが、バージョン 1.0.0-beta3 でのみライブラリに追加されました。 Deeplearning4j は Spark とも統合されており、マシンのクラスターでのトレーニングをサポートします。複数の GPU を備えた単一のサーバーでトレーニングする場合、Spark を使用することはあまり役に立ちません。

<<:  中国科学院の張雲泉氏:コンピューティング能力は定量化可能であり、インテリジェントコンピューティングは公共サービスになる

>>:  コンテストを利用して学習を促進し、エコシステムを共同で構築し、人工知能を普及させましょう。

ブログ    

推薦する

人工知能は私たちに何をもたらしてくれるのでしょうか?人工知能は非常に強力です

人工知能は皆さんにとって馴染み深いものかもしれませんが、では人工知能は一体何ができるのでしょうか?本...

ボストン・ダイナミクスのロボット犬はまもなく腕が生え、走って充電できるようになる

ボストン・ダイナミクスの創業者マーク・レイバート氏は、スポットロボット犬は将来「家庭で使用できるよう...

ランサムウェア対策における人工知能の重要な役割

人工知能技術は、企業が多くのビジネス課題を解決するために不可欠です。最も重要なアプリケーション領域の...

...

...

プロジェクトを始めたいけれど、どこから始めればいいのか分からないですか?興味深いオープンソースの機械学習プロジェクト7つを試してみる

プロジェクトを実行することが機械学習を学ぶ唯一の方法であり、興味深く価値のあるプロジェクトを見つける...

Facebook、AIが著作権侵害を正確に識別できるようにソースデータ拡張ライブラリを公開: 100以上の拡張方法が提供される

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

チューリング学習:新世代のロボットは観察するだけで人間を模倣できる

[[187204]]最近、シェフィールド大学自動制御システム工学部のロデリッヒ・グロス博士は次のよう...

Google GlassのDIY貧弱版、カスタムジェスチャーコントロール、Raspberry Piがまたもや新しい遊び方を開発

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Google Brain の最新の操作は「レトロ」: 畳み込み注意は不要、画像分類は SOTA に近い

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

求人検索サイトIndeedの統計:AI採用は減速、求職者の関心は低下

6月末、わが国各省市で大学入試結果が次々と発表される中、学生の専攻選択は統計的な傾向に新たな波を起こ...

...

JD Digits JDDコンペティションが終了、「自動運転」と「人口動態国勢調査」の世界チャンピオンが発表

1月13日、JDD-2018 JDデジタルテクノロジーグローバルエクスプローラーコンペティションの世...

災害後、ウェイモブは独自のデータベースの構築を断念し、商人に1億5000万元を支払った。

[[316623]] 【51CTOオリジナル記事】先週、WeMallは大規模なシステム障害に見舞わ...