オンラインで約4000円のプリンターを売ったら裁判で300万円以上を支払うように命じられた男性

http://gigazine.net/news/20160607-30k-printer-judgment/
GIGAZINEの記事を見てひどい話だと思ったので調査。

http://www.courierpress.com/news/state/Indiana-man-sued-for-30K-over-40-printer-382004321.html
http://www.indystar.com/story/news/2014/10/01/enoughs-enough-indiana-supreme-court-tells-prolific-filer-lawsuits/16529893/
http://www.dailymail.co.uk/news/article-3627706/Man-sold-40-used-printer-Craigslist-spends-six-half-YEARS-court-spends-12-000-legal-fees.html

tiny-cnn

昨日に引き続きtiny-cnn。
https://github.com/nyanp/tiny-cnn

作者は多分日本人っぽい。2013/01頃に作り始めたみたいだ。
http://nyanp.hatenablog.com/entry/20130108/p1

tiny-cnnのレポジトリのdataフォルダには、mnistの訓練データは入っているけれど、cifarの訓練データは含まれていない。
http://www.cs.toronto.edu/~kriz/cifar.html
から cifar-10-binary.tar.gz をダウンロードして得たデータを指定して example_cifar_train プロジェクトを実行してみると、1回のepochの実行に 620秒程掛かる。(Core i5-4670 @ 3.40GHz)これが30回分なので学習が完了するのに5時間以上必要だ。

tiny-cnnはC++11で書かれているけれど、もっと単純にC言語で書かれた実装も見てみたいな。

トレーニングに結構時間が掛かるのでNeuralNetwork構築の試行錯誤が時間が掛かって大変そう。
まぁ何もしないで何も生まれる事は無いのだから何かするしかない。

tiny_cnn

http://d.hatena.ne.jp/shi3z/20160603
で紹介されているライブラリをビルドして動かしてみた。

OpenCVに依存しているのでそこで躓く。。OpenCVWindows用のインストーラーを落としたら以前入れていたのがあって、cmakeも済んでいた。少し古いのだったけど問題はなかった。3系でなくても問題無かった。

そして、tiny-cnn自体のビルドでさらに躓く…。cmakeでVisualStudio用のプロジェクトファイルを生成させてるけど、OpenCVの場所が分からないというので、


set CMAKE_PREFIX_PATH=D:\libs\opencv\build\x86\vc12\staticlib
で指定(静的Linkにしているのは、OpenCVのDLLのPathを環境変数に指定する必要が省けるので)

その後に


cmake .
(間違った場合は CMakeCache.txt を消してから実行したほうが良いかな。。)

ビルドすると opencvのincludeファイルが見つからないとのエラー。


D:\libs\opencv\build\include
VC++ DirectoriesのInclude Directoriesに入れる。プロパティファイルとか自動指定してくれたら楽なのに。。

その後ビルドのエラーを解消するために、C/C++ => Code Generation => Runtime Library を Multi-threaded Debug に変更。

そして example_mnist_train を動かそうとするとデータフォルダを指定する必要があるとの事なので相対パスで指定して起動したら例外が発生(間違って ../data と指定していた。正しくは ./)。しかもデバッグビルドなのにコードデバッグが出来ない。
原因は、プロジェクトのプロパティの C/C++ General の Debug Information Format が空指定になっていたから。ララ…cmakeよ…。

とりあえずデータフォルダ(D:\projects\tiny-cnn\data)を絶対パス指定して起動したらうまくいった。多分相対パス指定が間違えていただけかな。。main関数で try catchしてエラー内容をcoutしてくれたら良いな。。

tiny-cnn/examples/mnist/train.cpp の train_lenet 関数内のラムダ式 on_enumerate_epoch が呼ばれる周期が、Debugビルドだと約257秒程度、Releaseでも約49秒の時間が掛かる。

tinyなライブラリだけど依存しているライブラリがあったりcmake使ってたりすると色々と躓くな。。まぁ便利なものはbeneficialでもあるので時には我慢して受け入れたほうが良いな。。