のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

最近噂のDeepLearningLibrary DeepLearning4jを使ってみた(前編)

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

本日は最近噂のDeepLearningLibraryのDeepLearning4j(dl4j)を使ってみました。
(1)なのは、次回ソースコードの解説を行う予定だからです。思っていたよりインストール部分が長くなりました。

DeepLearning4jとは?

[http://deeplearning4j.org/deeplearning4j.org

Java及びScalaで書かれたDeepLearningのライブラリです。
jblasを呼び出して書かれているいろんな意味で際物のライブラリなような気がします。
Pythonやluaのスクリプト言語の中に急にぽつんとJavaですとも、驚きです。
(内部的にはC++で書かれているものもありますが、ええ)

特徴

  1. HadoopやSparkとの親和性
  2. ND4jと呼ばれる、numpyとほぼ同等の速度を持つライブラリが使われている。
  3. GPU使用可
  4. 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プロジェクトをインポートします。
f:id:tereka:20150829021410p:plain

f:id:tereka:20150829021459p:plain

f:id:tereka:20150829021509p:plain

f:id:tereka:20150829021524p:plain

ただひたすらに進めていくとインポートできます。
インポートをうまくできるとこんな感じのディレクトリ階層になります。

f:id:tereka:20150829021632p:plain

後は実行するのみ、
右クリック→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...

感想

  1. さすがにサンプルぐらいDBNでNaNにならないものを載せてください。
  2. がんばって宣伝しているのに、使い勝手が悪い上にチュートリアルが親切でない。
  3. Pythonの方がシンプルで素晴らしい。
  4. 導入しんどい。
  5. 実感ないけど、Spark,Hadoop対応とかで輝くのだろうなぁと少々感じたり、、