最近噂のDeepLearningLibrary DeepLearning4jを使ってみた(前編)
皆さんこんにちは
お元気ですか。私は元気です。
本日は最近噂のDeepLearningLibraryのDeepLearning4j(dl4j)を使ってみました。
(1)なのは、次回ソースコードの解説を行う予定だからです。思っていたよりインストール部分が長くなりました。
DeepLearning4jとは?
[http://deeplearning4j.org/deeplearning4j.org
Java及びScalaで書かれたDeepLearningのライブラリです。
jblasを呼び出して書かれているいろんな意味で際物のライブラリなような気がします。
Pythonやluaのスクリプト言語の中に急にぽつんとJavaですとも、驚きです。
(内部的にはC++で書かれているものもありますが、ええ)
特徴
- HadoopやSparkとの親和性
- ND4jと呼ばれる、numpyとほぼ同等の速度を持つライブラリが使われている。
- GPU使用可
- n-dimensional arrayを使用可能
DeepLearning 4jを動かしてみる
ちなみにExample動かすのも大変です。
準備するソフト達
Java(JDK込み)
IntelliJ IDEA
Maven
Canova
Github
今回のブログの記事では、Intellij IDEA、Maven、Canovaのインストールについては扱います。
後は自力でがんばってください。
必要なソフトウェア
git clone https://github.com/deeplearning4j/nd4j git clone https://github.com/deeplearning4j/Canova git clone https://github.com/deeplearning4j/deeplearning4j
Example
Exampleですが、公式サイトから飛んだものdeeplearning4j/dl4j-snapshot-examples · GitHubでは、私の環境について動作しませんでした。
まぁ開発中と書かれているので仕方ないということで、、
ということで別の箇所から持ってきました。deeplearning4j/dl4j-0.4-examples · GitHub
こちらだと動作するようです。
git clone https://github.com/deeplearning4j/dl4j-0.4-examples.git
(READMEに記載されている公式サイトのパフォーマンスの低さには目をつむりましょう)
Maven
必要な人はbuild用ソフトウェアmavenをインストールしましょう。
インストールしているかどうかは以下のコマンドでわかります。
mvn —version -bash: mvn: command not found
なければinstallしましょう
brew install maven
そしてすべてのプロジェクトに対して(git cloneしたフォルダ内部で)以下のコマンドを実行してください。
mvn clean install -DskipTests -Dmaven.javadoc.skip=true
IntelliJ IDEAの起動
mavenプロジェクトをインポートします。
ただひたすらに進めていくとインポートできます。
インポートをうまくできるとこんな感じのディレクトリ階層になります。
後は実行するのみ、
右クリック→Runで問題ありません。
実行例
以下のログはDBNMnistSingleLayerExample.javaを動作させた場合です。
若干パラメータを変更した記憶がありますがこんな感じです。
o.d.e.d.DBNMnistSingleLayerExample - Load data.... o.d.e.d.DBNMnistSingleLayerExample - Build model.... o.d.e.d.DBNMnistSingleLayerExample - Train model.... o.d.n.m.MultiLayerNetwork - Training on layer 1 with 500 examples o.d.o.s.BaseOptimizer - Objective function automatically set to minimize. Set stepFunction in neural net configuration to change default settings. o.d.o.s.BaseOptimizer - Objective function automatically set to minimize. Set stepFunction in neural net configuration to change default settings. 8 29, 2015 2:17:44 午前 com.github.fommil.jni.JniLoader liberalLoad 情報: successfully loaded /var/folders/qv/sc2l31t11k580cchnby5qmjm0000gn/T/jniloader3740889794946347044netlib-native_system-osx-x86_64.jnilib o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=1.0. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.2. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.04000000000000001. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.008000000000000002. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.0016000000000000005. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=3.2000000000000013E-4. score=NaN, score2=NaN. Scaling back step size... o.d.o.l.ScoreIterationListener - Score at iteration 0 is NaN o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=1.0. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.2. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.04000000000000001. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.008000000000000002. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.0016000000000000005. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=3.2000000000000013E-4. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=1.0. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.2. score=NaN, score2=NaN. Scaling back step size... o.d.o.s.BackTrackLineSearch - Value is infinite after jump. oldStep=0.04000000000000001. score=NaN, score2=NaN. Scaling back step size...
感想
- さすがにサンプルぐらいDBNでNaNにならないものを載せてください。
- がんばって宣伝しているのに、使い勝手が悪い上にチュートリアルが親切でない。
- Pythonの方がシンプルで素晴らしい。
- 導入しんどい。
- 実感ないけど、Spark,Hadoop対応とかで輝くのだろうなぁと少々感じたり、、