Neural network implementation with easily accessible hidden values, gradient calculations and customizable non-linearity functions. Meant for experimenting with numerical optimization methods but is meant to be a general framework for exploration/experimenting with smaller prototype Neural Networks.