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 を使用することはあまり役に立ちません。

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

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ディープラーニングを使用してNBAの試合結果を予測する

この記事では、ディープラーニングを使用して NBA の試合結果を予測します。この記事を通じて、次のこ...

国勢調査ではAISのAIロボットが初めて「世帯内に入る」

「こんにちは、泰達街人口調査事務所です。」現在、第7回全国人口調査が盛んに行われている。天津浜海新...

2021年の中国サービスロボット産業の発展状況のレビュー

人口の高齢化が加速し、教育に対する需要が引き続き強いことから、中国のサービスロボットは大きな市場潜在...

研究室から生活まで、人工知能はどこまで進化しているのでしょうか?

[[212805]]人工知能の概念は1956年に初めて提唱されました。60年間の浮き沈みを経て、人...

9つの主要テーマ!機械学習アルゴリズム理論に関する面接の質問の要約

[[342976]]機械学習は、強力な理論的側面と実践的側面を備えた技術分野です。機械学習関連の仕事...

2018年世界AI大学ランキング:カーネギーメロン大学がトップ、清華大学は13位

最近、CSRankingsは2018年のコンピューターサイエンスのトップスクールのランキングを発表し...

スーパーコンピューターで設計された、カエルの細胞から作られた初の生きたロボット

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

リザーブプールコンピューティングにおける新たなブレークスルー:ニューロン数が少なくなり、コンピューティング速度が最大100万倍に高速化

複雑なシステムを予測するには、より多くのニューロンを使用する必要がありますか?ネイチャー・コミュニケ...

TensorFlow を使用した LSTM モデルの構築に関する詳細なチュートリアル

[[242005]]ターゲットこの記事の目的は、基本的な LSTM モデルを構築するために使用できる...

...

DAMOアカデミーのAI研究により、初めて大規模な膵臓がんの早期スクリーニングが可能に

私たちの日常生活では、携帯電話のロック解除から検索エンジンを使った地図ナビゲーションまで、人工知能と...

顔検出と認識がますます普及しているのはなぜでしょうか?その背後にある技術は何ですか?

過去数年間、顔認識は広く注目を集めており、画像分析の分野で最も有望なアプリケーションの 1 つと考え...

...