Neural Networks written in go


The version1.0.0
includes just basic Neural Network functions such as Feed Forward and Elman Recurrent Neural Network.A simple Feed Forward Neural Network can be constructed and trained as follows:
package mainimport ("github.com/goml/gobrain""math/rand")funcmain() {// set the random seed to 0rand.Seed(0)// create the XOR representation patter to train the networkpatterns:= [][][]float64{{{0,0}, {0}},{{0,1}, {1}},{{1,0}, {1}},{{1,1}, {0}},}// instantiate the Feed Forwardff:=&gobrain.FeedForward{}// initialize the Neural Network;// the networks structure will contain:// 2 inputs, 2 hidden nodes and 1 output.ff.Init(2,2,1)// train the network using the XOR patterns// the training will run for 1000 epochs// the learning rate is set to 0.6 and the momentum factor to 0.4// use true in the last parameter to receive reports about the learning errorff.Train(patterns,1000,0.6,0.4,true)}
After running this code the network will be trained and ready to be used.
The network can be tested running using theTest
method, for instance:
The test operation will print in the console something like:
[0 0] -> [0.057503945708445] : [0][0 1] -> [0.930100635071210] : [1][1 0] -> [0.927809966227284] : [1][1 1] -> [0.097408795324620] : [0]
Where the first values are the inputs, the values after the arrow->
are the output values from the network and the values after:
are the expected outputs.
The methodUpdate
can be used to predict the output given an input, for example:
inputs:= []float64{1,1}ff.Update(inputs)
the output will be a vector with values ranging from0
to1
.
In the example folder there are runnable examples with persistence of the trained network on file.
In example/02 the network is saved on file and in example/03 the network is loaded from file.
To run the example cd in the folder and run
This library implements Elman's Simple Recurrent Network.
To take advantage of this, one can use theSetContexts
function.
In the example above, a single context will be created initialized with0.5
. It is also possibleto create custom initialized contexts, for instance:
contexts:= [][]float64{{0.5,0.8,0.1}}
Note that custom contexts must have the same size of hidden nodes + 1 (bias node),in the example above the size of hidden nodes is 2, thus the context has 3 values.
- 1.0.0 - Added Feed Forward Neural Network with contexts from Elman RNN