SNIPE (click here to get on the dedicated page) is a well-documented JAVA library that implements a framework for neural networks in a speedy, feature-rich and usable way. It was originally designed for high performance simulations with lots and lots of neural networks (even large ones) being trained simultaneously, and therefore it is pretty optimized. Have fun with it!
SNIPE is designed with respect to each of the following goals:
Generalized data structure for arbitrary network topologies, so that virtually all network structures can be realized or even easily hand-crafted.
Built-In, fast and easy-to-use learning operators for gradient descent or evolutionary learning, as well as mechanisms for efficient control of even large network populations.
Mechanisms for design and control of even large populations of neural networks
Optimal speed neural network data propagation in contrast to naive data structures, even in special cases like multilayer perceptrons and sparse networks, as well as low computational topology editing effort.
Low memory consumption - grows only with the number of synapses, not quadratically with the number of neurons
In-situ processing - no extra memory or preprocessing of the data structure is necessary in order to use the network after editing
Usage of only low level data structures (arrays) for easy portability. It is not the goal to quench the last tiniest bit of asymptotic complexity out of the structure, but to make it usable, light weight and fast in praxis.
No object-oriented overload, like objects for every neuron or even synapses, etc.