Giter VIP home page Giter VIP logo

gopfield's Introduction

gopfield

GoDoc License Travis CI Go Report Card codecov

This project provides an implementation of Hopfield network in Go. It implements both Hebbian and Storkey training algorithms. The goal is to provide a simple API to build Hopfield networks in Go.

Get started

Get the source code:

$ go get -u github.com/milosgajdos83/gopfield

Make sure you've got all the dependencies (go get -u should retrieve them, but this project might use a specific version of gonum so make sure you run the following command):

$ make dep

Run the tests:

$ make test

Example

You can see an example program below. It first creates a Hopfield network pattern based on arbitrary data. The data is encoded into binary values of +1/-1 (see the documentation) using Encode function. It is then stored in the network and then restored.

package main

import (
	"fmt"
	"os"

	"github.com/milosgajdos83/gopfield/hopfield"
)

func main() {
	pattern := hopfield.Encode([]float64{0.2, -12.4, 0.0, 3.4})
	// Create new Hopfield Network and set its size to the length of pattern
	n, err := hopfield.NewNetwork(pattern.Len(), "hebbian")
	if err != nil {
		fmt.Fprintf(os.Stderr, "\nERROR: %s\n", err)
		os.Exit(1)
	}
	fmt.Printf("Storing: \n%v\n\n", pattern)
	// store patterns in Hopfield network
	if err := n.Store([]*hopfield.Pattern{pattern}); err != nil {
		fmt.Fprintf(os.Stderr, "\nERROR: %s\n", err)
		os.Exit(1)
	}

	// restore image from Hopfield network
	res, err := n.Restore(pattern, "async", 10)
	if err != nil {
		fmt.Fprintf(os.Stderr, "\nERROR: %s\n", err)
		os.Exit(1)
	}
	fmt.Printf("Restored: \n%v\n", res)
}

If you run this program, you will see the pattern being reconstructed correctly:

$ go run main.go
Storing:
⎡ 1⎤
⎢-1⎥
⎢-1⎥
⎣ 1⎦

Restored:
⎡ 1⎤
⎢-1⎥
⎢-1⎥
⎣ 1⎦

You can find a more elaborate example in the examples directory of the project. There is a mnist example which tries to reconstruct a corrupted image loaded from the patterns subdirectory which contains two MNIST images: 0 and 4. These are stored in the Hopfield neural network. The mnist program then picks image 4 and adds some random noise to it. Finallys, it tries to reconstruct the original image from the network. See below how to use the example program:

First you need to build it:

$ make examples

If the build succeeds, you will find the built binary in _build directory of the project root. You can find out the cli options it provides:

$  _build/mnist -h

Example run:

$ _build/mnist -mode "async" -iters 1 -datadir ./examples/mnist/patterns/ -output out.png -training "storkey"

This will generate two files in directory: noisy.png and out.png.

noisy.png image displays the file that was attempted to be reconstructed from the network:

Corrupted image 4

out.png image shows the reconstucted image:

Reconstructed image 4

gopfield's People

Contributors

milosgajdos avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.