gonet

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2020 License: MIT Imports: 8 Imported by: 0

README

gonet

Documentation Go Report Card CircleCI Mentioned in Awesome Go

gonet is a Go module implementing multi-layer Neural Network.

Install

Install the module with:

go get github.com/dathoangnd/gonet

Import it in your project:

import "github.com/dathoangnd/gonet"

Example

This example will train a neural network to predict the outputs of XOR logic gates given two binary inputs:

package main

import (
	"fmt"
	"log"

	"github.com/dathoangnd/gonet"
)

func main() {
	// XOR traning data
	trainingData := [][][]float64{
		{{0, 0}, {0}},
		{{0, 1}, {1}},
		{{1, 0}, {1}},
		{{1, 1}, {0}},
	}

	// Create a neural network
	// 2 nodes in the input layer
	// 2 hidden layers with 4 nodes each
	// 1 node in the output layer
	// The problem is classification, not regression
	nn := gonet.New(2, []int{4, 4}, 1, false)

	// Train the network
	// Run for 3000 epochs
	// The learning rate is 0.4 and the momentum factor is 0.2
	// Enable debug mode to log learning error every 1000 iterations
	nn.Train(trainingData, 3000, 0.4, 0.2, true)

	// Predict
	testInput := []float64{1, 0}
	fmt.Printf("%f XOR %f => %f\n", testInput[0], testInput[1], nn.Predict(testInput)[0])
	// 1.000000 XOR 0.000000 => 0.943074

	// Save the model
	nn.Save("model.json")

	// Load the model
	nn2, err := gonet.Load("model.json")
	if err != nil {
		log.Fatal("Load model failed.")
	}
	fmt.Printf("%f XOR %f => %f\n", testInput[0], testInput[1], nn2.Predict(testInput)[0])
	// 1.000000 XOR 0.000000 => 0.943074
}

Documentation

See: https://pkg.go.dev/github.com/dathoangnd/gonet

License

This project is licensed under the MIT License - see the LICENSE file for details.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type NN

type NN struct {
	// Whether the problem is regression or classification
	Regression bool
	// Number of nodes in each layer
	NNodes []int
	// Activations for each layer
	Activations [][]float64
	// Weights
	Weights [][][]float64
	// Last change in weights for momentum
	Changes [][][]float64
}

NN struct is used to represent a neural network

func Load

func Load(path string) (NN, error)

Load neural network from file

func New

func New(nInputs int, nHiddens []int, nOutputs int, isRegression bool) NN

New creates a new neural network

'nInputs' is number of nodes in input layer

'nHiddens' is array of numbers of nodes in hidden layers

'nOutputs' is number of nodes in output layer

'isRegression' is whether the problem is regression or classification

return the neural network

func (*NN) Config

func (nn *NN) Config(nInputs int, nHiddens []int, nOutputs int, isRegression bool)

Config the neural network, also reset all trained weights

'nInputs' is number of nodes in input layer

'nHiddens' is array of numbers of nodes in hidden layers

'nOutputs' is number of nodes in output layer

'isRegression' is whether the problem is regression or classification

func (*NN) Predict

func (nn *NN) Predict(input []float64) []float64

Predict output with new input

func (*NN) Save

func (nn *NN) Save(path string) error

Save neural network to file

func (*NN) Train

func (nn *NN) Train(inputs [][][]float64, iterations int, lRate, mFactor float64, debug bool)

Train the neural network

'inputs' is the training data

'iterations' is the number to run feed forward and back propagation

'lRate' is learning rate

'mFactor' is used by momentum gradient discent

'debug' is whether or not to log learning error every 1000 iterations

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL