JANN is an Artificial Neural Networks Library written in JAVA and licensed under GPL V3or later.

Since November 17th 2011 JANN has been moved to GITHUB.com

Introduction

Features

Download and Installation

So What differs JANN from any other library ? It is that it was built on three main concepts:

  1. Open Source (GPL)
  2. High Perfomance (Built on native Matrix library JBLAS)
  3. Graph Theory (Uses JGrapht Library to design the Neural Networks)

Open Source

Well, I’ve started using MATLAB tool box when I was developing my graduation project. The tool is pretty easy to use on the basic level but as you become more aware of neural networks and programming you’d face some walls.

One is if you’re an object oriented and C++ “Code Conventions Advocate”; the problem with MATLAB is that the language used mainly is in VB style and many suggests that this is because it was written for engineers and Scientists which leads us to one greater concept who is MATLAB really for ? The answer is clear…

So knowing that MATLAB wasn’t built for a guy like me is supported by the fact that it wasn’t open source. The beauty of Open source technology is that people see it from much different perspectives (that’s how there are many different licenses)  but they still agree on one main concept (Freedom of choice) If you had a program and you just thought it’s a great software but you had this crazy Icon or function that bothers you all the time which the company (Developer) thought it’s great but you didn’t in most cases if you bought a CD with the software inside all you’d do is mailing the company and hoping that in the next version they might listen to you OK! this might be he never happens example, what about if we took it to broader level ? a bunch of brilliant developers thought this software would be great if we did this and that I guess now the issue is somehow bigger and important, what if others needed these improvements ? oh sorry the software is copy righted and you’ll go to jail if you didn’t follow the rules.

At the end open source has proven its benefits and no need for further defense.

High Performance

Talking about Higher performance, In our code we’ve been trying to optimize the code as much as possible but also clear and easy to be read hopefully.

We’re using JBLAS, jblas is a fast linear algebra library for Java. jblas is based on BLAS and LAPACK, the de-facto industry standard for matrix computations, and uses state-of-the-art implementations like ATLAS for all its computational routines, making jBLAS very fast.

jblas is essentially a light-wight wrapper around the BLAS and LAPACK routines. These packages have originated in the Fortran community which explains their often archaic API. On the other hand modern implementations are hard to beat performance wise. jblas aims to make this functionality available to Java programmers such that they do not have to worry about writing JNI interfaces and calling conventions of Fortran code.

Neural Networks Design

Applying the graph theory cam to my head when I struggled for the creation of generalized technique to control the Design of Neural Networks, but all data structures were weak. When I first started vector of vectors it was pretty easy at first but it then started to get so much complicated the way you want to connect two Layers together and point out who’s the predecessor and who’s the successor then if you wanted to disconnect them and so on.

So during surfing I’ve come to read about Graph theory and hash-maps I don’t know which of those two led me to the other but I know that.

when I first tried hash-maps (HASH TABLES) the layers were lost because the layer would change its contents (weights, inputs) and that would of course affect the (Hash Code) which defines where the Layer is. So I’ve then tried to rewrite the generated get hash code Function my self which a static counter and ID were used to define the creation of each layer. But as I went further I felt it’s not right as what if two layers were created on different PC’s ? and were communicating in the future that technique felt not right.

So I started using Integers just integers to indicate where the layer is in a simple ArrayList as you would see Network is a child of ArrayList, and that’s very handy in dealing with layers.

Graph Theory

We’re using JGrapht as the designer (Integer , DefaultEdge) the library is relatively easy and using just Integers in for it makes it much easier and independent of who ever the chosen (Layer Class) as I previously mentioned Integers are used as indices of Layers in a network (LIST of Layers).

About JGraphT

JGraphT is a free Java graph library that provides mathematical graph-theory objects and algorithms. JGraphT supports various types of graphs including:

  • directed and undirected graphs.
  • graphs with weighted / unweighted / labeled or any user-defined edges.
  • various edge multiplicity options, including: simple-graphsmultigraphspseudographs.
  • unmodifiable graphs – allow modules to provide “read-only” access to internal graphs.
  • listenable graphs – allow external listeners to track modification events.
  • subgraphs graphs that are auto-updating subgraph views on other graphs.
  • all compositions of above graphs.

Although powerful, JGraphT is designed to be simple and type-safe (via Java generics). For example, graph vertices can be of any objects. You can create graphs based on: Strings, URLs, XML documents, etc; you can even create graphs of graphs! This code exampleshows how.

Other features offered by JGraphT:

History

I’ve started developing JANN in C++ and it was CANN what I’ve come to discover were some technical issues of trying to use C++ one issue was that JANN isn’t supposed to be a system application it’s supposed to be a desktop application which means that JANN should be more open to updates, GUI, portability and still perform well.

Implementation of C++ applications is very powerful but it lacks the ease of deployment and update as you would come to know that only for you to use a dynamic library (.SO) in linux would be a huge burden or if you tried to go through the MAKE FILE  hassle.

though I found operator overloading very powerful technique I also found that sometimes you can just live happily without it. I wish I had taken notes to be more accurate about why I moved to JAVA but unfortunately I didn’t.

Though I find the future open to implementations of the concept in C++.

Testimonials

SoftPedia.com

JANN is a unique, open source, small, easy to use Artificial Neural Networks library.