deept.js
Version:
Eine TypeScript/JavaScript Library für ML im Browser
1 lines • 10.8 kB
JavaScript
var dt=function(t){var e={};function r(a){if(e[a])return e[a].exports;var o=e[a]={i:a,l:!1,exports:{}};return t[a].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(a,o,function(e){return t[e]}.bind(null,o));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=4)}([function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e,r){this.rows=t,this.cols=e,this.data=[],r||(r=0);for(var a=0;a<this.rows;a++){this.data[a]=[];for(var o=0;o<this.cols;o++)this.data[a][o]=r}}return t.fromArray=function(e){for(var r=new t(e.length,1),a=0;a<e.length;a++)r.data[a][0]=e[a];return r},t.toArray=function(t){for(var e=[],r=0;r<t.rows;r++)for(var a=0;a<t.cols;a++)e.push(t.data[r][a]);return e},t.multiply=function(e,r){if(e.cols!==r.rows)return console.error("Cols of A must match rows of B."),new t(0,0);for(var a=new t(e.rows,r.cols),o=0;o<a.rows;o++)for(var i=0;i<a.cols;i++){for(var n=0,s=0;s<e.cols;s++)n+=e.data[o][s]*r.data[s][i];a.data[o][i]=n}return a},t.subtract=function(e,r){for(var a=new t(e.rows,e.cols),o=0;o<e.rows;o++)for(var i=0;i<e.cols;i++)a.data[o][i]=e.data[o][i]-r.data[o][i];return a},t.add=function(e,r){for(var a=new t(e.rows,e.cols),o=0;o<e.rows;o++)for(var i=0;i<e.cols;i++)a.data[o][i]=e.data[o][i]+r.data[o][i];return a},t.transpose=function(e){for(var r=new t(e.cols,e.rows),a=0;a<e.rows;a++)for(var o=0;o<e.cols;o++)r.data[o][a]=e.data[a][o];return r},t.copy=function(e){for(var r=new t(e.rows,e.cols),a=0;a<e.rows;a++)for(var o=0;o<e.cols;o++)r.data[a][o]=e.data[a][o];return r},t.map=function(e,r){for(var a=new t(e.rows,e.cols),o=0;o<e.rows;o++)for(var i=0;i<e.cols;i++){var n=e.data[o][i];a.data[o][i]=r(n)}return a},t.prototype.multiply=function(e){if(e instanceof t)for(var r=0;r<this.rows;r++)for(var a=0;a<this.cols;a++)this.data[r][a]*=e.data[r][a];else for(r=0;r<this.rows;r++)for(a=0;a<this.cols;a++)this.data[r][a]*=e},t.prototype.map=function(t){for(var e=0;e<this.rows;e++)for(var r=0;r<this.cols;r++){var a=this.data[e][r];this.data[e][r]=t(a)}},t.prototype.copy=function(){for(var e=new t(this.rows,this.cols),r=0;r<this.rows;r++)for(var a=0;a<this.cols;a++)e.data[r][a]=this.data[r][a];return e},t.prototype.add=function(e){if(e instanceof t)for(var r=0;r<this.rows;r++)for(var a=0;a<this.cols;a++)this.data[r][a]+=e.data[r][a];else for(r=0;r<this.rows;r++)for(a=0;a<this.cols;a++)this.data[r][a]+=e},t.prototype.subtract=function(t){for(var e=0;e<this.rows;e++)for(var r=0;r<this.cols;r++)this.data[e][r]-=t},t.prototype.randomize=function(){for(var t=0;t<this.rows;t++)for(var e=0;e<this.cols;e++)this.data[t][e]=2*Math.random()-1},t.prototype.print=function(){console.table(this.data)},t.prototype.fill=function(t){t||(t=0);for(var e=0;e<this.rows;e++)for(var r=0;r<this.cols;r++)this.data[e][r]=t},t}();e.default=a},function(t,e,r){"use strict";var a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=a(r(0)),i=a(r(2)),n=function(){return function(t,e){this.w_f_t=new o.default(e,t),this.w_f_t.randomize(),this.biases=new o.default(e,1),this.biases.randomize(),this.values=new o.default(e,1)}}();e.HiddenLayer=n;var s=function(){return function(t,e){this.w_f_t=new o.default(e,t),this.w_f_t.randomize(),this.biases=new o.default(e,1),this.biases.randomize()}}();e.OutputLayer=s,e.addHiddenLayer=function(t,e){e.hiddenLayerNodes[e.numHiddenLayers]=t.nodes,0==e.numHiddenLayers?e.hiddenLayers[e.numHiddenLayers]=new n(e.inputNodes,e.hiddenLayerNodes[e.numHiddenLayers]):e.hiddenLayers[e.numHiddenLayers]=new n(e.hiddenLayerNodes[e.numHiddenLayers-1],e.hiddenLayerNodes[e.numHiddenLayers]),e.numHiddenLayers++},e.addOutputLayer=function(t,e){e.outputNodes=t.nodes,e.outputLayer=new s(e.hiddenLayerNodes[e.numHiddenLayers-1],e.outputNodes)},e.load=function(t){var e=JSON.parse(t),r=new i.default;r.inputNodes=e.inputNodes;for(var a=0;a<e.hiddenLayerNodes.length;a++)r.hiddenLayerNodes[a]=e.hiddenLayerNodes[a];for(a=0;a<e.hiddenLayers.length;a++)r.hiddenLayers[a]=e.hiddenLayers[a];return r.numHiddenLayers=e.numHiddenLayers,r.outputNodes=e.outputNodes,r.outputLayer=e.outputLayer,r.learningRate=e.learningRate,r}},function(t,e,r){"use strict";var a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var i=a(r(0)),n=o(r(3)),s=o(r(1)),d=function(){function t(){this.inputNodes=0,this.hiddenLayerNodes=[],this.hiddenLayers=[],this.numHiddenLayers=0,this.outputNodes=0,this.outputLayer=new s.OutputLayer(0,0),this.learningRate=.1,this.totalError=0}return t.prototype.addLayers=function(t){for(var e=0;e<t.length;e++){var r=t[e];"input"==r.type?this.inputNodes=r.nodes:"hidden"==r.type?s.addHiddenLayer(r,this):"output"==r.type?s.addOutputLayer(r,this):console.error("Invalid layertype: "+r.type)}},t.prototype.predict=function(t,e){if(t.length==this.inputNodes){var r=i.default.fromArray(t),a=i.default.multiply(this.hiddenLayers[0].w_f_t,r);(a=i.default.add(a,this.hiddenLayers[0].biases)).map(n.sigmoid);for(var o=1;o<this.hiddenLayers.length;o++)a=i.default.multiply(this.hiddenLayers[o].w_f_t,a),(a=i.default.add(a,this.hiddenLayers[o].biases)).map(n.sigmoid);var s=i.default.multiply(this.outputLayer.w_f_t,a);if((s=i.default.add(s,this.outputLayer.biases)).map(n.sigmoid),!e)return i.default.toArray(s);e(i.default.toArray(s))}else console.error("Number of given inputs ("+t.length+") does not match up with number of input nodes ("+this.inputNodes+").")},t.prototype.train=function(t,e){void 0==e&&(e={iterations:1e6,print:!0,test:!0}),e.iterations||(e.iterations=1e6),void 0==e.print&&(e.print=!0),void 0==e.test&&(e.test=!0),!0===e.print&&console.log("Training NeuralNetwork ...");for(var r=0;r<e.iterations;r++){var a=n.pickRandomFromArray(t);if(a.input.length!=this.inputNodes)return void console.error("Number of given inputs ("+a.input.length+") does not match up with number of input nodes ("+this.inputNodes+").");a.target.length!=this.outputNodes&&console.error("Number of given targets ("+a.target.length+") does not match up with number of output nodes ("+this.outputNodes+").");var o=i.default.fromArray(a.input),s=i.default.multiply(this.hiddenLayers[0].w_f_t,o);(s=i.default.add(s,this.hiddenLayers[0].biases)).map(n.sigmoid),this.hiddenLayers[0].values=s;for(var d=1;d<this.hiddenLayers.length;d++)s=i.default.multiply(this.hiddenLayers[d].w_f_t,s),(s=i.default.add(s,this.hiddenLayers[d].biases)).map(n.sigmoid),this.hiddenLayers[d].values=s;var u=i.default.multiply(this.outputLayer.w_f_t,s);(u=i.default.add(u,this.outputLayer.biases)).map(n.sigmoid);var l=i.default.fromArray(a.target),f=i.default.subtract(l,u),h=i.default.map(u,n.dsigmoid);h.multiply(f),h.multiply(this.learningRate);var p=i.default.transpose(this.hiddenLayers[this.numHiddenLayers-1].values),y=i.default.multiply(h,p);this.outputLayer.w_f_t.add(y),this.outputLayer.biases.add(h);var c=i.default.transpose(this.outputLayer.w_f_t),v=i.default.multiply(c,f);for(d=this.numHiddenLayers-1;d>=0;d--){var m=i.default.map(this.hiddenLayers[d].values,n.dsigmoid);if(m.multiply(v),m.multiply(this.learningRate),d>=1){var L=i.default.transpose(this.hiddenLayers[d-1].values),w=i.default.multiply(m,L);this.hiddenLayers[d].w_f_t.add(w),this.hiddenLayers[d].biases.add(m)}else if(0===d){var _=i.default.transpose(o),g=i.default.multiply(m,_);this.hiddenLayers[d].w_f_t.add(g),this.hiddenLayers[d].biases.add(m)}}if(!0===e.print)for(d=0;d<20;d++)if(r===d*e.iterations/10&&0!==r){var b=10*d,N=i.default.toArray(i.default.subtract(l,u));console.log(b+"% ("+r+") von "+e.iterations+", ERROR: "+N)}}!0===e.test?(!0===e.print&&console.log("Testing ..."),this.totalError=this.test(t,{iterations:e.iterations/2,print:!1}),!0===e.print&&console.log("Done!\nTesting Results: "+100*this.totalError+"% correct\n---")):!1===e.test&&console.log("Done!")},t.prototype.test=function(t,e){var r=0;e||(e={iterations:1e6,print:!0}),e.iterations||(e.iterations=1e6);for(var a=0;a<e.iterations;a++){var o=n.pickRandomFromArray(t),s=i.default.fromArray(o.input),d=i.default.multiply(this.hiddenLayers[0].w_f_t,s);(d=i.default.add(d,this.hiddenLayers[0].biases)).map(n.sigmoid),this.hiddenLayers[0].values=d;for(var u=1;u<this.hiddenLayers.length;u++)d=i.default.multiply(this.hiddenLayers[u].w_f_t,d),(d=i.default.add(d,this.hiddenLayers[u].biases)).map(n.sigmoid),this.hiddenLayers[u].values=d;var l=i.default.multiply(this.outputLayer.w_f_t,d);(l=i.default.add(l,this.outputLayer.biases)).map(n.sigmoid);for(var f=i.default.fromArray(o.target),h={val:0,index:0},p={val:0,index:0},y=i.default.toArray(l),c=i.default.toArray(f),v=0;v<y.length;v++)y[v]>p.val&&(p.val=y[v],p.index=v);for(v=0;v<c.length;v++)c[v]>h.val&&(h.val=c[v],h.index=v);p.index===h.index&&r++}var m=r/e.iterations;return!0===e.print&&console.log(r+" of "+e.iterations+" correct: "+100*m+"%"),m},t.prototype.mutate=function(t){console.error("Feature not implemented yet")},t.log=function(t){for(var e=0,r=0;r<t.numHiddenLayers;r++)e+=t.hiddenLayerNodes[r];var a="\nNeural Network: \n";a+=" NODES:\n",a+=" Input nodes: "+t.inputNodes+"\n",a+=" Hidden nodes: "+e+"\n",a+=" Output nodes: "+t.outputNodes+"\n",a+="\n",a+=" HIDDEN LAYERS:\n";for(r=0;r<t.numHiddenLayers;r++)a+=" Hidden Layer "+(r+1)+":\n",a+=" Nodes: "+t.hiddenLayerNodes[r]+"\n";a+=" LEARNING RATE: "+t.learningRate,console.log(a)},t.prototype.log=function(){t.log(this)},t.prototype.emit=function(){return JSON.stringify(this,void 0,1)},t}();e.default=d},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.pickRandomFromArray=function(t){return t[Math.floor(Math.random()*t.length)]},e.sigmoid=function(t){return 1/(1+Math.exp(-t))},e.dsigmoid=function(t){return t*(1-t)}},function(t,e,r){"use strict";var a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=a(r(0));e.Matrix=o.default;var i=a(r(2));e.NeuralNetwork=i.default;var n=r(1);e.loadNetwork=n.load}]);