Build Your Own Neural Network
windowpain writes "I just discovered Joone. It's an LGPL neural net development environment for creating, training and testing neural networks. The aim is to create a powerful environment both for enthusiasts and professional users, based on the newest Java technologies.
Joone is composed by a central engine that is the fulcrum of all applications that already exist or will be developed.
It's available in Linux, MacOS and Windows versions."
From the SNNS licensing terms:
SNNSv4.1 is available NOW free of charge for research purposes under a...
LGPL(Joone's Licensing) is a VERY attractive License for commercial users, "free for research purposes" would preclude some from being able to use it,
other wise I agree this Joone seems to have less features/algorithm support than SNNS
--Im an oven mitt, not an engineer! (SLArbys Radio Commercial)
For those who want to combine genetic algorithms with neural networks, there's also a project that combines joone with JGAP (a Java genetic algorithms framework).
Plus, the only limit on their demo is that you can only save a networks structure, but not the trained weights or output. This means you can use the demo to determine if a problem is solvable through a NN, and only get your company to buy it if it works for your project.
My current neural network implementation (on generic CPU) with order of 10^6 neurons use CBLAS ATLAS fast linear algebra library as a number crunching part. When you have to do some down to metal optimizations Jave is waste of time.
The best property of NN's are when compared to other learning machines is that computation can be parallelized easily. For small problems one should maybe use other ML machines (SVM doesn't overfit) which isn't as easily/well parallelized (-> doesn't scale up so well).
Above solution doesn't scale up when making neural networks with 10^9 or more neurons with current (or near future) hardware. One have to radically redesign one's implementation because your neural network memory/data is most of the time on hard disk and only small portitions is in memory. Need to take into account the time of disk accesses (database theory is helpful here). Also making your network asynchronous and implementation multithreaded (eliminate harm of I/O wait-states from HDD accesses + good use of SMP+RAID) is a must.
And of course if one have enough money designing your/buying a NN chip is of course the best option (because the parallism of NN chips can be made to be wicked fast).
If you want a simulation framework that is more flexible than a dedicated NN simulator, we are developing Ikaros, a discrete-time modular simulator. Runs on Linux, OSX and Windows. Implement your modules in C or C++ (and implementing bindings for other languages would be easy), then specify a connection matrix for inputs and outputs between modules to form a complete simulation.
The next step in development is creating some graphical visualizing tools, and to make it run multiple instances transparently across a network.
Trust the Computer. The Computer is your friend.