Need help with gobrain?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

476 Stars 54 Forks MIT License 53 Commits 1 Opened issues


Neural Networks written in go

Services available


Need anything else?

Contributors list


Neural Networks written in go

GoDoc Build Status

Getting Started

The version

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 main

import ( "" "math/rand" )

func main() { // set the random seed to 0 rand.Seed(0)

// create the XOR representation patter to train the network
patterns := [][][]float64{
    {{0, 0}, {0}},
    {{0, 1}, {1}},
    {{1, 0}, {1}},
    {{1, 1}, {0}},

// instantiate the Feed Forward
ff := &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 error
ff.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 the

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 method

can be used to predict the output given an input, for example:
inputs := []float64{1, 1}

the output will be a vector with values ranging from


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

go run main.go

Recurrent Neural Network

This library implements Elman's Simple Recurrent Network.

To take advantage of this, one can use the

ff.SetContexts(1, nil)

In the example above, a single context will be created initialized with

. It is also possible to 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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.