Today i thought i should write about various toolboxes / libraries available for interested researchers / developers working in the area of Artificial Neural Networks.
The first toolbox i became familiar with is the MATLAB Neural Network Toolbox which is handy for various simulation / testing purposes. I did not work with this tool much, but I think it is not used as an implementation platform for ANNs (but it’s really good for testing out various ideas). One important aspect of MATLAB NN Toolbox is that it supports various types of networks and training algorithms. I think by far this is the most complete “ToolBox” out there for a researcher on ANNs.
Then there is FANN (Fast Artificial Neural Networks) which is equally suited for testing as well as implementations of ANNs. Although the types of ANNs currently supported by FANN is limited to standard multilayer back-propagation networks (fully connected as well as sparse connected) , there are / have been several attempts to include various other types of networks into FANN (GSoC projects, SOMS and various other types).
Lush (Lisp Universal Shell) is not an NN library but a programming language (a derivative of Lisp) which includes support for many research subjects (including ANNs). Lush also supports Convolutional Neural Networks (CNNs) and has bindings for OpenCV.
Apart from those three, I found conv-net to be a very specific ANN library which supports Convolutional Neural Networks. But it only supports simulation of CNNs which makes it pretty dumb because we cannot actually train any network using this library.
The final project i want to mention is hosted here. This is not a library nor is a toolbox. This is a very specific application which performs handwritten digit recognition using convolutional neural networks. Based on this project i was able to put up a stand-alone convolutional neural network library which can train, simulate and save trained networks. I had to do a lot of reverse engineering because this is a windows MFC application (was quite hard to adopt it into Linux – which is my OS). I wish to publish this library somewhere on the web (may be in this blog itself) but first, i need to get proper permissions from the original developer.
02/03/2011 UPDATE: Today someone asked me about the library I mentioned above; I have hosted it here. Now the real problem is I cannot help with any usage instructions because for that I need to dig into my final year project which was completed about three years ago (and I moved away from this area of study). I vaguely remember porting the code from win32 threads to pthreads (we needed the code to work on a linux platform) and we also added support for serializing and de-serializing trained networks (Rajika Kumarasiri). IIRC images are converted into vectors of grey scale values before being fed into the network (for training or testing). Someone with a fair bit of understanding about neural networks and C++ would be able to figure this out easily, in which case please let me know so that I can link to / post some usage instructions here
04/03/2011 UPDATE: The code I naively linked above doesn’t seem to compile out of the box. Upon further investigation I realized a few things:
- This shouldn’t be called a ‘library’ because it’s simply a collection of source files (but it can be converted to a formal library easily).
- Because of (1) I had to introduce a dummy main() method in order to get the source to compile (otherwise the linking phase will complain of a missing main method).
- This code depends on both pthreads library as well as OpenCV (image processing) library. Now because of the dependency on pthreads, you might get into trouble when compiling this source on a windows platform. May be perhaps an additional library like http://sourceware.org/pthreads-win32/ will be necessary (I’m not sure though). On my linux machine I had to install OpenCV libraries with following command:
yum install opencv.i686 opencv-devel.i686
- The im2double() function definition was missing, I have updated the code with this function and few other modifications (downloadable from the same link above).
- Once all of above are in place, we can compile the source with following command (on linux)
g++ -lpthread -lcxcore -lhighgui *.cpp
Now that’s all I can recall for now. If time permits I will try to come up with some sample code to demonstrate the usage.