Skip to content
fonet is a deep neural network package for Go.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Updated Iris example Apr 10, 2018
.gitignore Add .gitignore Oct 6, 2017
.travis.yml Adding TravisCI Oct 4, 2017
LICENSE Update docs Oct 6, 2017
network.go Added Export and Load to/from json Apr 10, 2018
network_test.go Fix #5 - gofmt -s Oct 12, 2017


Build Status go Go Report Card GoDoc

fonet is a deep neural network package for Go. It's mainly created because I wanted to learn about neural networks and create my own package. I'm planning to continue the development of the package and add more function to it, for example exporting/importing a model.


It's the same as everywhere, you just have to run the

go get


I focused (and still focusing) on creating an easy to use package, but let me know if something is not clear.

Creating a network

As in the xor example, it's not so complicated to create a network. When you creating the network, you always have to define the layers.

n := fonet.NewNetwork([]int{2, 3, 1})
2 nodes in the INPUT LAYER
3 nodes in the HIDDEN LAYER
1 node in the OUTPUT LAYER

But my goal was also to create a package, which can create deep neural networks too, so here is another example for that.

n := fonet.NewNetwork([]int{6, 12, 8, 4})
6 nodes in the INPUT LAYER
12 nodes in the HIDDEN LAYER (1)
8 nodes in the HIDDEN LAYER (2)
4 nodes in the OUTPUT LAYER

Train the network

After creating the network, you have to train your network. To do that, you have to specify your training set, which should be like the next

var trainingData = [][][]float64{
    [][]float64{ // The actual training sample
            The INPUT data
            The OUTPUT data

After giving the training data, you can set the epoch and the learning rate.

n.Train(trainingData, epoch, lrate, true)
// Train(trainingData [][][]float64, epochs int, lrate float64, debug bool)

Note: When 'debug' is true, it'll show when and which epoch is finished

Predict the output

After training your network, using the Predict(..) function you can calculate the output for the given input.

In the case of XOR, it looks like the next

input := []float64{
out := n.Predict(input)
You can’t perform that action at this time.