最近、ニューラルネットワーク使って認識させる実験していて、お手軽にいろいろ試せる環境として、ブラウザ上からネットワーク構成作ってテストできるfannExplorerというツールを使っていました。
これはFast Artificial Neural Network Library (FANN)という、高速ニューラルネットワークライブラリを利用したシミュレータで、マルチスレッド対応してるので、マルチコアの恩恵もお手軽に得られてなかなかよいです。
(追記)
と書いたのですけど、マルチスレッド対応してるのは、複数のクライアントからの接続がマルチスレッドで走るだけで、一つのニューラルネットワークはマルチスレッドでは動いてくれないんですよね。
これはFANNライブラリ自体がそういう設計だから仕方ないんでしょうけども。
マルチコアを有効に使えるANNライブラリってどっかにころがってないのかな?
あと、コア部分はまだしも、ファイル入出力あたりのコードがすごく適当。まあ、使えりゃいいということなんだろうけど、もうちょっと汎用性あるように書いてもバチ当たらないと思う。
で、いろいろやってると、やっぱりこれだけじゃ出来ることの限界があるので、fannKernelというコア部に手を入れたいと思いました。
ということで、まず普通にビルドするのですが結構はまったので、すんごく需要が少なそうなエントリーですけども、Windows XP上でfannExplorerをビルドするための手引きを作ってみました。
ビルドする環境は、WindowsXPのVC++ 2008 Express Editionです。
VC++のインストール
VC++ 2008 Express Editionを普通にインストール
Visual Studio 2008 Express Editions
fannExplorerや後述のBoostは、VC++ 2005が正式対応とのことなのですが、2008でも動く。
Boostのインストールと設定
Boost C++ Libraries
のライブラリを利用しているため、インストールしておく必要がある。
BoostPro Computing - Free Downloads
にWindows用のバイナリインストーラがあるので、それを使ってお手軽インストール。
デフォルトでは「C:\Program Files\boost\boost_1_35_0」にインストールされるので、以降このディレクトリにインストールした場合として例示する。
利用されるライブラリの種類が「mt-sgd」と「mt-s」なので、マルチスレッド、スタティックの通常版とデバッグ版をインストールする。
「Complilers」で「「Visual C++ 9.0」を選択し、「Variants」では少なくとも「Multithread, static runtime」と「Multithread Debug, static runtime」を選択する必要がある。
Boostのライブラリを利用できるようにするため、VCの設定を行う。
Boostのインクルードファイルとライブラリファイルディレクトリをそれぞれ追加
プロジェクトファイルの編集
プロジェクトファイルの変換が必要になるが、fann\fannSoap\fannKernel\fannKernel.vcprojで指定されている
UpgradeFromVC71.vsprops の場所が、d:\Microsoft...となっていて変換できない問題があるので、置き換える。
3か所あるので、エディタで置換する。C:\Program Files\Microsoft... のところはVC++をインストールしたディレクトリに合わせて修正。
「d:\Microsoft Visual Studio 8\VC\VCProjectDefaults\UpgradeFromVC71.vsprops」
→「C:\Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\UpgradeFromVC71.vsprops」
(追記)
リビルドしようとすると、必要なファイルが消えてしまう問題があった。
これは、gSOAPを使っていて
「soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl」
あたりのファイルは、gSOAPのsoapcpp2により作られるようになっており、それがクリーンで消えてしまうため。
わざわざそのためだけにgSOAPをインストールするのもめんどくさいので、すでにあるファイルをそのまま使うように変更する。
<File RelativePath=".\fannKernel.h" >
以降の下記内容を削除する。
<FileConfiguration Name="Debug|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing gSOAP Compilation" CommandLine="D:/gSOAP/soapcpp2 "$(InputPath)"
" Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing gSOAP Compilation" CommandLine="D:/gSOAP/soapcpp2 "$(InputPath)"
" Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl" /> </FileConfiguration> <FileConfiguration Name="Debug Trace|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing gSOAP Compilation" CommandLine="C:/gSOAP/soapcpp2 "$(InputPath)"
" Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl" /> </FileConfiguration>
プロジェクトファイルの変換
fann\fannSoap\fannKernel\fannKernel.vcproj
を開くと、変換ウィザードが走って変換をうながされるのでそのまま変換。
ビルド
ここまで下準備がされていれば、普通にビルドすればOKのはず。
実行時には、実行ファイルのあるディレクトリ中に、クライアントのflash用コンテンツが入っている「fannExplorer」と、ニューラルネットワークのデータが入っている「net」のディレクトリが必要。