Mind
A neural network library built in JavaScript
A flexible neural network library for Node.js and the browser. Check out a live [demo](http://stevenmiller888.github.io/mindjs.net/) of a movie recommendation engine built with Mind. The project is written primarily in JavaScript, first published in 2015. It has gained significant community traction with 1,504 stars and 110 forks on GitHub. Key topics include: mind, neural-network, prediction.

A flexible neural network library for Node.js and the browser. Check out a live demo of a movie recommendation engine built with Mind.
Features
- Vectorized - uses a matrix implementation to process training data
- Configurable - allows you to customize the network topology
- Pluggable - download/upload minds that have already learned
Installation
bash$ yarn add node-mind
Usage
jsconst Mind = require('node-mind'); /** * Letters. * * - Imagine these # and . represent black and white pixels. */ const a = character( '.#####.' + '#.....#' + '#.....#' + '#######' + '#.....#' + '#.....#' + '#.....#' ) const b = character( '######.' + '#.....#' + '#.....#' + '######.' + '#.....#' + '#.....#' + '######.' ) const c = character( '#######' + '#......' + '#......' + '#......' + '#......' + '#......' + '#######' ) /** * Learn the letters A through C. */ const mind = new Mind({ activator: 'sigmoid' }) .learn([ { input: a, output: map('a') }, { input: b, output: map('b') }, { input: c, output: map('c') } ]) /** * Predict the letter C, even with a pixel off. */ const result = mind.predict(character( '#######' + '#......' + '#......' + '#......' + '#......' + '##.....' + '#######' )) console.log(result) // ~ 0.5 /** * Turn the # into 1s and . into 0s. */ function character(string) { return string .trim() .split('') .map(integer) function integer(symbol) { if ('#' === symbol) return 1 if ('.' === symbol) return 0 } } /** * Map letter to a number. */ function map(letter) { if (letter === 'a') return [ 0.1 ] if (letter === 'b') return [ 0.3 ] if (letter === 'c') return [ 0.5 ] return 0 }
Plugins
Use plugins created by the Mind community to configure pre-trained networks that can go straight to making predictions.
Here's a cool example of the way you could use a hypothetical mind-ocr plugin:
jsconst Mind = require('node-mind') const ocr = require('mind-ocr') const mind = Mind() .upload(ocr) .predict( '.#####.' + '#.....#' + '#.....#' + '#######' + '#.....#' + '#.....#' + '#.....#' )
To create a plugin, simply call download on your trained mind:
jsconst Mind = require('node-mind') const mind = Mind() .learn([ { input: [0, 0], output: [ 0 ] }, { input: [0, 1], output: [ 1 ] }, { input: [1, 0], output: [ 1 ] }, { input: [1, 1], output: [ 0 ] } ]); const xor = mind.download()
Here's a list of available plugins:
API
Mind(options)
Create a new instance of Mind that can learn to make predictions.
The available options are:
activator: the activation function to use,sigmoidorhtanlearningRate: the speed at which the network will learnhiddenUnits: the number of units in the hidden layer/siterations: the number of iterations to runhiddenLayers: the number of hidden layers
.learn()
Learn from training data:
jsmind.learn([ { input: [0, 0], output: [ 0 ] }, { input: [0, 1], output: [ 1 ] }, { input: [1, 0], output: [ 1 ] }, { input: [1, 1], output: [ 0 ] } ])
.predict()
Make a prediction:
jsmind.predict([0, 1])
.download()
Download a mind:
jsconst xor = mind.download()
.upload()
Upload a mind:
jsmind.upload(xor)
.on()
Listen for the 'data' event, which is fired with each iteration:
jsmind.on('data', (iteration, errors, results) => { // ... })
Releasing / Publishing
CircleCI will handle publishing to npm. To cut a new release, just do:
$ git changelog --tag <version>
$ vim package.json # enter <version>
$ git release <version>
Where <version> follows the semver spec.
Note
If you're interested in learning more, I wrote a blog post on how to build your own neural network:
Also, here are some fantastic libraries you can check out:
License
stevenmiller888.github.io ·
GitHub @stevenmiller888 ·
Twitter @stevenmiller888
Contributors
Showing top 6 contributors by commit count.
