gomind

package module
v0.0.0-...-a31b887 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2018 License: GPL-3.0 Imports: 7 Imported by: 0

README


GoMind

Build Status GoDoc codecov Go Report Card

Installation

go get github.com/surenderthakran/gomind

About

GoMind is a neural network library written entirely in Go. It only supports a single hidden layer (for now). The network learns from a training set using back-propagation algorithm.

Some of the salient features of GoMind are:

  • Supports following activation functions:
  • Smartly estimates ideal number of hidden layer neurons (if a count is not given during model configuration) for given input and output sizes.
  • Uses Mean Squared Error function to calculate error while back propagating.

Note: To understand the basic functioning of back-propagation in neural networks, one can refer to my blog here.

Usage

package main

import (
	"github.com/singhsurender/gomind"
)

func main() {
	trainingSet := [][][]float64{
		[][]float64{[]float64{0, 0}, []float64{0}},
		[][]float64{[]float64{0, 1}, []float64{1}},
		[][]float64{[]float64{1, 0}, []float64{1}},
		[][]float64{[]float64{1, 1}, []float64{0}},
	}

	mind, err := gomind.New(&gomind.ModelConfiguration{
		NumberOfInputs:                    2,
		NumberOfOutputs:                   1,
		NumberOfHiddenLayerNeurons:        16,
		HiddenLayerActivationFunctionName: "relu",
		OutputLayerActivationFunctionName: "sigmoid",
	})
	if err != nil {
		return nil, fmt.Errorf("unable to create neural network. %v", err)
	}

	for i := 0; i < 500; i++ {
		rand := rand.Intn(4)
		input := trainingSet[rand][0]
		output := trainingSet[rand][1]

		if err := mind.LearnSample(input, output); err != nil {
			mind.Describe(true)
			return nil, fmt.Errorf("error while learning from sample input: %v, target: %v. %v", input, output, err)
		}

		actual := mind.LastOutput()
		outputError, err := mind.CalculateError(output)
		if err != nil {
			mind.Describe(true)
			return nil, fmt.Errorf("error while calculating error for input: %v, target: %v and actual: %v. %v", input, output, actual, err)
		}

		outputAccuracy, err := mind.CalculateAccuracy(output)
		if err != nil {
			mind.Describe(true)
			return nil, fmt.Errorf("error while calculating error for input: %v, target: %v and actual: %v. %v", input, output, actual, err)
		}

		fmt.Println("Index: %v, Input: %v, Target: %v, Actual: %v, Error: %v, Accuracy: %v\n", i, input, output, actual, outputError, outputAccuracy)
	}
}

API Documentation

The documentation for various methods exposed by the library can be found at: https://godoc.org/github.com/surenderthakran/gomind

Documentation

Overview

Package gomind for a simple Multi Layer Perceptron (MLP) Feed Forward Artificial Neural Network library.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Model

type Model struct {
	// contains filtered or unexported fields
}

Model type defines the neural network's architecture and metadata.

func New

func New(configuration *ModelConfiguration) (*Model, error)

New is used to create a new GoMind network model.

func (*Model) CalculateError

func (model *Model) CalculateError(targetOutput []float64) (float64, error)

CalculateError function generates the error value for the given target output against the network's last output.

func (*Model) Describe

func (model *Model) Describe(showNeurons bool)

Describe function prints the current state of the neural network and its components.

func (*Model) LastOutput

func (model *Model) LastOutput() []float64

LastOutput function returns the last output of the network.

func (*Model) LearnSample

func (model *Model) LearnSample(input, output []float64) error

LearnSample function trains the neural network using the given input/output sample.

type ModelConfiguration

type ModelConfiguration struct {
	NumberOfInputs                    int // mandatory
	NumberOfOutputs                   int // mandatory
	NumberOfHiddenLayerNeurons        int
	LearningRate                      float64
	HiddenLayerActivationFunctionName string
	OutputLayerActivationFunctionName string
}

ModelConfiguration type defines the network configuration template filled by external code while creating a new model.

type NeuralNetworkInterface

type NeuralNetworkInterface interface {
	CalculateOutput(input []float64) []float64
	LastOutput() []float64
	HiddenLayer() *layer.Layer
	OutputLayer() *layer.Layer
	CalculateNewOutputLayerWeights(outputs, targetOutputs []float64) error
	CalculateNewHiddenLayerWeights() error
	UpdateWeights()
	CalculateError(targetOutput []float64) (float64, error)
}

NeuralNetworkInterface defines methods used by gomind from network.NeuralNetwork's type.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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