UNPKG

neuralnetwork

Version:

Rudimentary Neural Network in Typescript

171 lines (169 loc) 7.41 kB
/// <reference path="../../typings/index.d.ts" /> /*global require, describe, expect, assert, it*/ 'use strict'; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var chai = require('chai'); var neurons = require('../lib/neurons'); var layers_1 = require('../lib/layers'); var assert = chai.assert, should = chai.should(), expect = chai.expect; var TestNeuron = (function (_super) { __extends(TestNeuron, _super); function TestNeuron() { _super.apply(this, arguments); } TestNeuron.prototype.forward = function (a) { return 12; }; TestNeuron.prototype.backward = function (b) { return 12; }; return TestNeuron; }(neurons.Neuron)); describe('Test', function () { it('works', function (done) { assert.equal(true, true); done(); }); it('can load modules', function (done) { expect(neurons).to.not.be.undefined; done(); }); }); describe('Layers', function () { describe('Arguments', function () { it('can init', function (done) { var testLayer = new layers_1.Layer([{ kind: TestNeuron, amount: 3 }]); expect(testLayer.neurons.length).to.equal(3); done(); }); // it('should accept not accept odd number arguments more than 1', function(done) { // expect( function() { // return new Layers.Layer({}, 1, {}); // } ).to.throw(Error); // expect( function() { // return new Layers.Layer(); // } ).to.throw(Error); // expect( function() { // return new Layers.Layer({}, 1, {}, 2, {}); // } ).to.throw(Error); // done(); // }); // it('should accept even arguments at least', function(done) { // expect( function() { // return new Layers.Layer({}, 1, {}, 2); // } ).to.not.throw(Error); // done(); // }); // it('can initialize neuron list with default neurons', function(done) { // var test = new Layers.Layer(Neurons.IdentityNeuron, 10); // expect(test.neurons.length).to.be.equal(10); // // test = new Layers.Layer(Neurons.BiasNeuron, 1); // expect(test.neurons.length).to.be.equal(1); // // done(); // }); // it('can initialize neuron list', function(done) { // var test = new Layers.Layer(Neurons.IdentityNeuron, 10); // expect(test.neurons.length).to.be.equal(10); // // test = new Layers.Layer(Neurons.IdentityNeuron, 10, Neurons.BiasNeuron, 1); // expect(test.neurons.length).to.be.equal(11); // // done(); // }); xit('[deprecated] can initialize neuron list with object interface', function (done) { // var test = new Layers.Layer({ // forward: function(abc: number) { return 12; }, // backward: function(out: number) { return 12; } // }, 10); // // expect(test.neurons.length).to.be.equal(10); // expect(test.neurons[0].forward()).to.be.equal(12); // expect(test.neurons[0].backward()).to.be.equal(12); // // var test = new Layer({ // forward: function(abc: number) { return 12; }, // backward: function(out: number) { return 12; } // }, 10, Neurons.BiasNeuron, 22); // // expect(test.neurons.length).to.be.equal(32); // expect(test.neurons[0].forward()).to.be.equal(12); // // done(); }); it('each layer has a different name', function (done) { var lookup = new Set(); var test; for (var i = 0; i < 3; i++) { test = new layers_1.Layer([{ kind: TestNeuron, amount: 5 }, { kind: neurons.BiasNeuron, amount: 2 }]); expect(test.name.length).to.be.above(2); expect(lookup.has(test.name)).to.be.false; lookup.add(test.name); } done(); }); it('each neuron has a different name', function (done) { var lookup = new Set(); var test = new layers_1.Layer([{ kind: TestNeuron, amount: 5 }, { kind: neurons.BiasNeuron, amount: 2 }]); // Cute uniqueness test! :D test.neurons.forEach(function (n) { expect(lookup.has(n.name)).to.be.false; lookup.add(n.name); }); done(); }); it('can initialize inputbuffer outputbuffer inputerror outputerror', function (done) { var test = new layers_1.Layer([{ kind: neurons.SigmoidNeuron, amount: 10 }]); expect(test.inputBuffer.length).to.be.equal(test.neurons.length); expect(test.outputBuffer.length).to.be.equal(test.neurons.length); expect(test.inputError.length).to.be.equal(test.neurons.length); expect(test.outputError.length).to.be.equal(test.neurons.length); done(); }); }); describe('Helper methods', function () { it('can reset buffers', function (done) { var test = new layers_1.Layer([{ kind: neurons.IdentityNeuron, amount: 2 }]); test.inputBuffer = [1, 1.1]; test.forward(); test.resetBuffers(); expect(test.inputBuffer.length).to.be.equal(2); expect(test.inputBuffer[0]).to.be.equal(0); expect(test.inputBuffer[1]).to.be.equal(0); expect(test.outputBuffer[0]).to.be.equal(0); expect(test.outputBuffer[1]).to.be.equal(0); expect(test.inputError[0]).to.be.equal(0); expect(test.inputError[1]).to.be.equal(0); expect(test.outputError[0]).to.be.equal(0); expect(test.outputError[1]).to.be.equal(0); done(); }); }); describe('Propogation', function () { it('can forward', function (done) { var test = new layers_1.Layer([{ kind: neurons.IdentityNeuron, amount: 2 }]); test.inputBuffer = [1, 1.1]; test.forward(); expect(test.outputBuffer[0]).to.be.equal(neurons.IdentityNeuron.prototype.forward(test.inputBuffer[0])); expect(test.outputBuffer[1]).to.be.equal(neurons.IdentityNeuron.prototype.forward(test.inputBuffer[1])); done(); }); it('can backward', function (done) { var test = new layers_1.Layer([{ kind: neurons.IdentityNeuron, amount: 2 }]); test.outputError = [1, 1]; test.backward(); expect(test.inputError[0]).to.be.equal(neurons.IdentityNeuron.prototype.backward(test.outputError[0])); expect(test.inputError[1]).to.be.equal(neurons.IdentityNeuron.prototype.backward(test.outputError[1])); done(); }); }); }); //# sourceMappingURL=../maps/test/layers.spec.js.map