Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

fann-lite

2015.8.1 • Public • Published

fann-lite

pure javascript version of fann (fast artificial neural net library) with zero npm-dependencies (compiled from emscripten)

NPM NPM

documentation (original c-api)

http://leenissen.dk/fann/html/files2/gettingstarted-txt.html

  • currently only tested to work in chrome browser

live test-server

heroku.com test-server

build-status travis-ci.org build-status

build commit status

git-branch : master beta alpha
test-server : heroku.com test-server heroku.com test-server heroku.com test-server
coverage : istanbul-lite coverage istanbul-lite coverage istanbul-lite coverage
build-artifacts : build-artifacts build-artifacts build-artifacts

master branch

  • stable branch
  • HEAD should be tagged, npm-published package

beta branch

  • semi-stable branch
  • HEAD should be latest, npm-published package

alpha branch

  • unstable branch
  • HEAD is arbitrary
  • commit history may be rewritten

quickstart web example

to run this example, follow the instruction in the script below

  • example.js
/*
example.js
 
this node script will serve a web-page with an interactive neural net
 
instruction
    1. save this script as example.js
    2. run the shell command:
          $ npm install fann-lite && node example.js
    3. open a browser to http://localhost:1337
    4. edit or paste script in browser to interact with the neural net
*/
 
/*jslint
    browser: true,
    maxerr: 8,
    maxlen: 96,
    node: true,
    nomen: true,
    stupid: true
*/
 
(function (local) {
    'use strict';
    // run node js-env code
    (function () {
        // require modules
        local.fs = require('fs');
        local.http = require('http');
        local.path = require('path');
        local.url = require('url');
        // init assets
        local['/'] = (String() +
 
 
 
/* jslint-ignore-begin */
'<!DOCTYPE html>\n' +
'<html>\n' +
'<head>\n' +
    '<meta charset="UTF-8">\n' +
    '<title>\n' +
    'fann-lite [2015.6.1-a]\n' +
    '</title>\n' +
    '<link rel="stylesheet" href="/assets/utility2.css">\n' +
    '<style>\n' +
    '* {\n' +
        'box-sizing: border-box;\n' +
    '}\n' +
    'body {\n' +
        'background-color: #fff;\n' +
        'font-family: Helvetical Neue, Helvetica, Arial, sans-serif;\n' +
    '}\n' +
    'body > div {\n' +
        'margin-top: 20px;\n' +
    '}\n' +
    'textarea {\n' +
        'font-family: monospace;\n' +
        'height: 32em;\n' +
        'width: 100%;\n' +
    '}\n' +
    '.csslintOutputPre {\n' +
        'color: #f00;\n' +
    '}\n' +
    '.fannOutputPre {\n' +
        'color: #f00;\n' +
    '}\n' +
    '.testReportDiv {\n' +
        'display: none;\n' +
    '}\n' +
    '</style>\n' +
 
'</head>\n' +
'<body>\n' +
    '<div class="ajaxProgressDiv" style="display: none;">\n' +
    '<div class="ajaxProgressBarDiv ajaxProgressBarDivLoading" >loading</div>\n' +
    '</div>\n' +
    '<h1 >fann-lite [2015.6.1-a]</h1>\n' +
    '<h3>pure javascript version of fann (fast artificial neural net library) with zero npm-dependencies (compiled from emscripten)</h3>\n' +
    '<div>edit or paste script below to\n' +
    '<a href="http://leenissen.dk/fann/html/files2/gettingstarted-txt.html" target="_blank">\n' +
    'eval</a>\n' +
    '</div>\n' +
'<textarea class="fannInputTextarea">\n' +
'// test\n' +
'local.ann = local.fann.create_standard(3, 2, 3, 1);\n' +
'local.data = local.fann\n' +
    '.create_train_from_array(4, 2, 1, [-1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1]);\n' +
'local.fann\n' +
    '.set_activation_function_hidden(local.ann, local.fann.ACTIVATION_SIGMOID_SYMMETRIC);\n' +
'local.fann.set_activation_function_output(local.ann, 5);\n' +
'local.fann.train_on_data(local.ann, local.data, 5000, 1000, 0.001);\n' +
'console.log("1 xor 1 -> " + local.fann.run(local.ann, [1, 1]));\n' +
'console.log("1 xor 0 -> " + local.fann.run(local.ann, [1, -1]));\n' +
'console.log("0 xor 1 -> " + local.fann.run(local.ann, [-1, 1]));\n' +
'</textarea>\n' +
    '<pre class="fannOutputPre"></pre>\n' +
    '<div class="testReportDiv"></div>\n' +
    '<script src="/assets/fann.js"></script>\n' +
    '<script src="/assets/utility2.js"></script>\n' +
    '<script>\n' +
    'window.utility2 = window.utility2 || {};\n' +
    'window.utility2.envDict = {\n' +
        'npm_package_description: "pure javascript version of fann (fast artificial neural net library) with zero npm-dependencies (compiled from emscripten)",\n' +
        'npm_package_name: "fann-lite",\n' +
        'npm_package_version: "2015.6.1-a"\n' +
    '};\n' +
    'document.querySelector(\n' +
        '".fannInputTextarea"\n' +
    ').addEventListener("keyup", window.fann.fannInputTextarea);\n' +
    'window.fann.fannInputTextarea();\n' +
    '</script>\n' +
    '<script src="/test/test.js"></script>\n' +
 
'</body>\n' +
'</html>\n' +
/* jslint-ignore-end */
 
 
 
        String()).replace((/\{\{envDict\.\w+?\}\}/g), function (match0) {
            switch (match0) {
            case '{{envDict.npm_package_description}}':
                return 'this is an example module';
            case '{{envDict.npm_package_name}}':
                return 'example-module';
            case '{{envDict.npm_package_version}}':
                return '0.0.1';
            default:
                return '';
            }
        });
        local['/assets/fann.js'] = local.fann['/assets/fann.js'];
        local['/assets/utility2.css'] = '';
        local['/assets/utility2.js'] = '';
        local['/test/test.js'] = '';
        // create server
        local.server = local.http.createServer(function (request, response) {
            switch (local.url.parse(request.url).pathname) {
            // serve assets
            case '/':
            case '/assets/fann.js':
            case '/assets/utility2.css':
            case '/assets/utility2.js':
            case '/test/test.js':
                response.end(local[local.url.parse(request.url).pathname]);
                break;
            // default to 404 Not Found
            default:
                response.statusCode = 404;
                response.end('404 Not Found');
            }
        });
        if (process.env.npm_config_server_port) {
            return;
        }
        // start server
        local.serverPort = 1337;
        console.log('server starting on port ' + local.serverPort);
        local.server.listen(local.serverPort, function () {
            // this internal build-code will screen-capture the server
            // and then exit
            if (process.env.MODE_BUILD === 'testExampleJs') {
                console.log('server stopping on port ' + local.serverPort);
                require(
                    process.env.npm_config_dir_utility2 + '/index.js'
                ).phantomScreenCapture({
                    url: 'http://localhost:' + local.serverPort
                }, process.exit);
            }
        });
    }());
}((function () {
    'use strict';
    var local;
 
 
 
    // run shared js-env code
    (function () {
        // init local
        local = {};
        local.modeJs = (function () {
            try {
                return module.exports &&
                    typeof process.versions.node === 'string' &&
                    typeof require('http').createServer === 'function' &&
                    'node';
            } catch (errorCaughtNode) {
                return typeof navigator.userAgent === 'string' &&
                    typeof document.querySelector('body') === 'object' &&
                    'browser';
            }
        }());
        // init global
        local.global = local.modeJs === 'browser'
            ? window
            : global;
        // init fann-lite
        local.fann = local.modeJs === 'browser'
            ? window.fann
            : (function () {
                try {
                    return require('fann-lite');
                } catch (errorCaught) {
                    return require('./fann.js');
                }
            }());
        // export local
        module.exports = local;
    }());
    return local;
}())));

output from shell

screen-capture

output from phantomjs-lite

screen-capture

npm-dependencies

  • none

package-listing

screen-capture

package.json

{
    "author": "kai zhu <kaizhu256@gmail.com>",
    "description": "pure javascript version of fann \
(fast artificial neural net library) with zero npm-dependencies \
(compiled from emscripten)",
    "devDependencies": {
        "phantomjs-lite": "^2015.7.1",
        "utility2": "~2015.8.5"
    },
    "keywords": [
        "ann",
        "fann",
        "net", "neural-net", "nn"
    ],
    "license": "MIT",
    "main": "fann.js",
    "name": "fann-lite",
    "os": ["darwin", "linux"],
    "repository" : {
        "type" : "git",
        "url" : "https://github.com/kaizhu256/node-fann-lite.git"
    },
    "scripts": {
        "build-ci": "node_modules/.bin/utility2 shRun shReadmeBuild",
        "start": "npm_config_mode_auto_restart=1 \
node_modules/.bin/utility2 shRun node test.js",
        "test": "node_modules/.bin/utility2 shRun shReadmeExportPackageJson && \
node_modules/.bin/utility2 test test.js"
    },
    "version": "2015.8.1"
}

todo

  • add meaningful tests
  • fix demo failure in firefox
  • none

change since 4931707a

  • npm publish 2015.8.1
  • update README.md
  • none

changelog of last 50 commits

screen-capture

internal build-script

  • build.sh
# build.sh 
 
# this shell script will run the build for this package 
 
shBuild() {
    # this function will run the main build 
    # init env 
    export npm_config_mode_phantomjs=0 || return $?
    export npm_config_mode_slimerjs=1 || return $?
    . node_modules/.bin/utility2 && shInit || return $?
 
    # run npm-test on published package 
    shRun shNpmTestPublished || return $?
 
    # test example js script 
    export npm_config_timeout_exit=10000 || return $?
    MODE_BUILD=testExampleJs \
        shRunScreenCapture shReadmeTestJs example.js || return $?
    unset npm_config_timeout_exit || return $?
 
    # run npm-test 
    MODE_BUILD=npmTest shRunScreenCapture npm test || return $?
 
    # if running legacy-node, then do not continue 
    [ "$(node --version)" \< "v0.12" ] && return
 
    # deploy app to heroku 
    shRun shHerokuDeploy hrku01-$npm_package_name-$CI_BRANCH || return $?
}
shBuild
 
# save exit-code 
EXIT_CODE=$?
# create package-listing 
MODE_BUILD=gitLsTree shRunScreenCapture shGitLsTree || exit $?
# create recent changelog of last 50 commits 
MODE_BUILD=gitLog shRunScreenCapture git log -50 --pretty="%ai\u000a%B" || exit $?
# if running legacy-node, then do not continue 
"$(node --version)" \< "v0.12" ] && exit $EXIT_CODE
# upload build-artifacts to github, and if number of commits > 16, then squash older commits 
COMMIT_LIMIT=16 shBuildGithubUpload || exit $?
exit $EXIT_CODE

Install

npm i fann-lite

DownloadsWeekly Downloads

3

Version

2015.8.1

License

MIT

Last publish

Collaborators

  • avatar