{"_id":"@death_raider/neural-network","_rev":"11-90317006ba2f11807711d9c3ea361f79","name":"@death_raider/neural-network","dist-tags":{"latest":"2.0.3"},"versions":{"1.0.0":{"name":"@death_raider/neural-network","version":"1.0.0","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"homepage":"https://github.com/Death-Raider/Neural-Network#readme","_id":"@death_raider/neural-network@1.0.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-hTXb4LQK+FeCvJ+146V6wmutM8eNRRbrOEQjHdsPP4nWhZf9ViHhfKZj1MYMNAM4WlKBRFXt/1XFOE00X2iggA==","shasum":"30bdc9bdb852b32eaf46c3687e63f4d2cbc95552","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.0.0.tgz","fileCount":2,"unpackedSize":7733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs+d6CRA9TVsSAnZWagAATfwP/2okHD32oTUL4JKpXZMC\nehTRnUSJwqUqRNBRXHYYWnkF3ymQ4tQuoadxq9GpheSWAWJhmd4S3KJlC1So\nP2gGf+6CxgvGbYto9iEAfi4CgglAbswC5NmMRW3SPQs5a8dacE6KtzmXvqns\nzQukseJu43C+c9U2ZAjzX1515z3bMLTLCEmDVQqUqZy6/dqQf2GnT35yNn4b\nYuheAMGOGGvlmJ5ZA/jDe52Lo09Zy9RSLibD+WsazGoJNnllsGqfN8cWqkCH\ns97e6k+zrh+C0H97VZpisfqHT4WRox67cgJTswtEPlt3HixNOG2+lLDeq+nw\nkvmB/G7OHXKQpkEAxneH3d7e5cFuqQ0Tpnadm/y+IMllkY/7FWFpxv70uKhG\nrKXX3ofOJhQOZzPr7cmLiIUcMZQ9WjF4Bo0U2d1IoGzCXBc6WjrDGMFM9BBS\nRkxwOCMYKqn/Us61YNeN4MdtEuJ6BBrwYHnC8bpzYl9+o/9ySe76cKa7smmr\nVtClSH7LVb1IVGBgtkNL1jSrfIoKZaEOw3ke7pXi7d60/MwP0fZhbzPxlL2w\nvXIWgbKaopCl9mInfEUmmfODvJ0bJe37cLTdupZi4c8a5ZPMiQbMd9GpEgB9\nbdiUFmI3jwVL9GZoTZbmS75395MA+ofw5jS088wU1G9UJtaGOV/PFNrnaBsL\nNgGp\r\n=9zkd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKNecbJjbbEI2NKK1MAvuPY2z8erLWGLdokWHlLRfh1AiEAksVySRbO1AL1JhHec3y6B9iPgVnXktUpDRKW2IPEHRM="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.0.0_1605625722323_0.1532398836385962"},"_hasShrinkwrap":false},"1.1.0":{"name":"@death_raider/neural-network","version":"1.1.0","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"homepage":"https://github.com/Death-Raider/Neural-Network#readme","_id":"@death_raider/neural-network@1.1.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ewUnuoN20QMlRs6xduSmkWvEONUr35944EiF512+jvCCiDeC9Je3lPfmOD3WJgDiSU7LFiB9h0KWbjc19GjKEw==","shasum":"b91c63d5ea18f11caea71c9b6b444e6d058f7e3b","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.1.0.tgz","fileCount":2,"unpackedSize":7752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs+kZCRA9TVsSAnZWagAA4/wP/jkeWXOZKyJ8j4s0pa9P\nyfLj/P4Ito65o0cWur3nZAv8oGq4nxQN0g+t6D+SC19JclRdFdqJ2CVTkCG5\nrsK/oQBxpitT20z6ffIzbp31+rcPnlotaVBygoaqskANs2fYBEkG4ak82gKx\nqeZ2KwKyGy68nle8xhUigqWqBA8Dos0jfcBh4/afVGwI8Tn+kIhE5vVHRwPs\nt851OeJfnrdNPxhDb3pfzoXX7wHGfYSjQkYF2/vzfjjblCQi4DFLE0lP8gsN\nQ145lj6OQwt08OqZOj27irnyJZupzS8jlggX1V92LQ7vzSoPNotdBEHMkQtZ\nvfme58wKw/oBF3QpSdcdpnOMHEOG6c4ucZo8PaWfZjlpOBlMz58rqxbBUzAR\nMdZFQpWzmv1rUKIcVULxZ2P5mdzUMBRNrg352n01p9qitASEjiabm/0ozM6z\nedOQn/agNSgRM0Liaesq3xSb7PYgQM15IXaIb44EC6TrNR+s2Aqk8M0sxHBp\nWeCA2e1Bwvgb4rEO+lgG5mMJRTqf+7EV4V56cDqh4Co2TI86vjCrc6yPUqAg\nBH6w+dvkp+7J2NzFJ4xP7DJi6dtB7eWXw28q0gyvgONnaHfDlSIm0VirXVa5\n4HLc8NooOUzQZ2YcMYUcY9GLPwdo4Jn7AhTiDv90aLSI0WzYHtUxyJwjlwew\ncuuf\r\n=Sk+C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC93AK30eixR/E2JpPubmKvmojseL47NKWuAp1k9yRuRwIhAIRMsz4p9DT9B2+pDHeTyPym8ZTpJWZptzU3qNsUPcWi"}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.1.0_1605626136683_0.5388203912452116"},"_hasShrinkwrap":false},"1.1.1":{"name":"@death_raider/neural-network","version":"1.1.1","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"homepage":"https://github.com/Death-Raider/Neural-Network#readme","_id":"@death_raider/neural-network@1.1.1","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-pDqeU6oFG3uEEjMtSB9Qc/cJQ+sZi3xemFwqhk67dVoWuKXK28K/1B0H14KbzjKteGrQYuJvkiGG/CKJCVst0g==","shasum":"226e8b4db65ee3804747331c0b921f09ffa84d47","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.1.1.tgz","fileCount":3,"unpackedSize":11690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs+qaCRA9TVsSAnZWagAAkGAP/1pOOjueQlbo0hAXb1AD\nFwLLX8OdwnCXHFgh/f+HMA7SmuEpdk3iPwwV2zf91N/FOrdz0d9KoKGeUnG3\njhuoA7GP3rRyi6fjPu4nwosgHMu6IwJgo4xDl0+dtB6Bju2EiZeYILFSUBIi\n0e4SdeSH37F84QmYQjUdHhj7KNCVZxE8X/tNdoGuTVhf2sxpqFn1XGraCM1F\nLMJQPzXwcMbzXYuAvmPbi893K9TF3mDJuIyPc6HnuwUA6wxojctBmTKqIxVy\nVNDRizi73WPLMuLIuGZ+45zjxfnvLH2OGsHxa/nMYtqqqDsJ+t37+Ykc3NP0\nIuVvZsBnbKraBpPfbme7+cf5ICLC9MndouwRoT5NtgTDUI8OmkNhnIqgOnYo\nBJQuJUU7X8XMxo00VqvoWUO/0saFrsVCX06eqMGYD1Oe8osBoyhWXXHLCkpe\nB5tTPy14FXNq7BSya6Upaef9GqTMHflhDTFnuJoiKK8/LhSV6hbiAq7BFOIe\nmWuMgQrXvwixRszJ7m3gUGES4X+amgv+hqhgU7mefqzslEfqhPPBHIqm6EIQ\nep1YY9endI76pQ93CZyNGqqQrHlJVLGERHQLR6ItpnWXEhcpwa5IRYHn8A4q\ndpqau2stt2S/2cIU7WcbCx5+CI3Z6Tn+YGhWaCWrVbfnzTrK1l/u2VW22H9o\n+y+V\r\n=Dff1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+wBWGY6NdPr+cVLyT7/6Tx/fZzibGWETB6m0gJFXbbAiAWV8WfkPh5y+drfZmh22goIH2DJUcK2DWm87Shw/eiwA=="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.1.1_1605626521626_0.42640600531575656"},"_hasShrinkwrap":false},"1.1.2":{"name":"@death_raider/neural-network","version":"1.1.2","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@1.1.2","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-n5aL7KGRMkZRXRFo9qimf8oicAjwCnOrni29I9p77t0X42ddff5Wcna1aIRe70owTPwBoDAKV5Iy1VBEfZ8T/Q==","shasum":"bc19d0d813280338af818cbd1008205cfb750a30","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.1.2.tgz","fileCount":3,"unpackedSize":11652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftAseCRA9TVsSAnZWagAA1REP/ArTMA+amAHn1w24GQ3n\nGmFPhgXA9aJ3lGCBvjViJnntBlTUSGdoI+IvAf9ePAPDBjHdM/c7v6yMIHsw\n5Ml27RRUCUEWaMy1OiGkLrf3YFRQ7ZfpbjfqEjViOgsmsd2ayv5N343O3Aki\ngz8AtML1z8I1ZTdUSBQi2MTNfuuCwuYOxqT4YX3jeN5QXoBidt7BxWRkgCCy\n9adWechCc6x24b2cwAVAK0jM7npBmKdm+w42bcwwzxJjRhFojieB9rrkCJOl\n+fbvxhE7iqbiMyy8zr28fVynI1rcMk3Mqz/3sHYL+qV/1CBwo/kHJ+6Euusz\niwO3cpJJd1HgJSjpFvYt8gMfCvTr6Y2xOcZGMek/+vkawhaeWCcg/nhOhcvs\nepZiHBnFo9m1lUwkBPztaPw2GCzChtIjElKuzNNGlKvL0nPCcrN5ZjQ2mHl0\nPmbdkkvFnXbgvheLBwLf6zp04tBlDdeqio63RovqHk6m1P/hGdKLaAx4CQQP\nN0lExBAogQD7hhutjUOZEhdfIXp5UmYj3YJ3jxQvBquPpKdb1lEPIkTygqog\nDRAymaO17YinlggszaHyg+r13peuMZIC8I4vzghbWABJK/2hsocrA4XJAQVm\nQAKa3ochXy/A9R94HtL40AJGq6aGo/ft8hW7vsSymw2qWWqqdbDsM9gM1wPR\nr6id\r\n=P1/H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ8GuTrv+zEwt+R1LuR6rD4H4++ONoA9qf/f72GjDAFQIgF6/ZASDz5z4RKlYtJWeduiH3ChDfzATfMj/ypSB3gsQ="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.1.2_1605634846159_0.12688373618418614"},"_hasShrinkwrap":false},"1.2.0":{"name":"@death_raider/neural-network","version":"1.2.0","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","dependencies":{"image-pixels":"^2.2.2"},"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@1.2.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-9xffBNkLCufjyGDluzMUwZuBsl/f5LiNOKVEyIcURKR7NuhVddZpitk7/io7jTIelPDY51njAo/qPPbI/2FJFg==","shasum":"f5bc7243121e1c37a23fe34399c10c595d0e31e2","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.2.0.tgz","fileCount":3,"unpackedSize":18397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwKS1CRA9TVsSAnZWagAAdlcP/i9a3MY4rUIdZdvVgTCP\nKgVb9yMGT4QTvAbg0AJmCkFSLqu6MkO0jbtmxPoGAw9FyWRYNzxYkwKKqfqi\nC+NygISNkjGSgdVrMEDFZhGcPdd560lK9bXzIxIsWU7+vkCgl3MrwYd2UhKK\nXVAXtm3NhVXPeMBh9L2N7Cg/zTTPo9/xP249jx5tZwSxNPYjzyLFkPe8xx7G\n0B0rLD2ZZISp0OolNEEW3Db4zt1sRg/Ry4fX61lFhX25tVYVMnt2+2MwVOzZ\ncAyRR41e6TebtIJsCbr3BXkWviqZtV5jMibvbot0WHWjhvaBKFIv0E8ZBgTt\niudKZ6YoyPveeGqSIRFrdnplIoJfcUfbsJsjLdbkCA4AsRG3R6PDtRsQ8ht4\nBI0nb+ymtdnwQdqad3t4tYdzLyKqH3J6J7A5GyV0xs/JJDmd1sIH85v1QcR/\nSFazs+/1ezBDwrmUsOd834OkmXTnaptb6HP/fyPf4kZ7OqcnmglLzqPJd5Y+\nxJghxSh5Y55LsdXM5957IFXVNk4HpdF2q/GdLDjlH5q0mK3u/Z59G7R7vGG+\nL56YmXSJ/iHNFDhPZ5pkpMh30PSCJrlzteXfsJvYmXeRUFg9EGiMznwpKOHU\nEqyUtyK1lrrfiItOTZWGNpIHmgGvdJslKvwPyp/7YTXod68Xz3qyR2j7mIBT\nFY+5\r\n=wzrN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMn/OcMU76iDLdmi0MweshNA8aSq8l0UnY2zyvwx57RAiBz9OxDLmvAKDXfGyeeW9PQyN7izG8vZiJvyt3wQwiqdQ=="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.2.0_1606460596604_0.2993261490155612"},"_hasShrinkwrap":false},"1.2.1":{"name":"@death_raider/neural-network","version":"1.2.1","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","dependencies":{"image-pixels":"^2.2.2"},"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@1.2.1","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xoYqiydRQuuc/pRjNSykaGk65vwgqzz4ZJviJsdSPbCo9M5+74JfQ2mPvLYDRJzjXF69Z1kL5ZHrrEHJO6acRw==","shasum":"5e8956e658a94c0c0f5adaab47628b35a9a295ea","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.2.1.tgz","fileCount":4,"unpackedSize":29533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwKUwCRA9TVsSAnZWagAAM4QP/jUlj76ZYSEGxM651ZBw\nXW6FERKOvD5NbXLX9RbSB6T3tXLj+yCz6Zf0BXAlTDOc4+cvrkR6hkUDleb4\njwiaY4+FZi5vgUCRZ2PG+gnbNYd9JPleRTWlS6V8Wm/mbYpOT1PrPFKcGp9z\n223kfh8du8ztiYU+Dugvck7Gh06dXZHpZ6qkydEGszgOzAXVBA33o1ktALPK\nyJKQY3pllfWZvomPGnRvJbCgNfpuzG3u66BOSxhO/rGx7fy+DvojQ9uvVSTK\n9D0X8vTiifbuTXVuQpcbb7bISKoq1qRo+RlkqGxvm6DHb/pc8HVbjhqBgdgK\nzJFCCi+flD8K55qIrQ9GcnMxtELt6O9xewvBVQXwwa82YnXbb11s08B5BC1e\noLSJrobTwPqyjfddO+QEF4LLYXiajokQfOkNFyLDUEG49rxHAzOg1iyWag25\nIEcXb64zsv4huGsDHUJv6WTN3cnsPhjrjYvYEmaBp7aygciWK14UVxhOXWCb\nmdFj4OCIVWvHAjcyaWg/Y8fEPMKkWlYL9werlCsslUSvsBVU6uMlZLRK1cb4\n6Ye4hb2ksfAF6xPbiYAw+JO3kYSp/vihcT7TT6nwqYwQ2ztLtP936DSOrTj3\nMxmVAGi5bVyztzJQJBZhzqa7R/l4HLVL/ZgSlLJ1PgV7XJ2oI8dGnOeTkDd9\nLCtr\r\n=SFRi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS9VwJo+QIxK0lMLEtatsCHUKshFRt9ctZysuBJNFynQIgWPAALJLVMyAM29Z6Ivw3ersvq3mB+y1utgG7cuUDe2Q="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.2.1_1606460720371_0.1203399201594888"},"_hasShrinkwrap":false},"1.2.2":{"name":"@death_raider/neural-network","version":"1.2.2","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","gitHead":"b294d4209166d70b8142494ac58984720ffcfb23","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@1.2.2","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-C74HNZJrcQPl5HWqyXskfDl7sqjW7QyBqhvLf5Jb31TZ6WkQYNw0CVkpbSMV3JO1Cofucf+wonb4FS/4aVbkzg==","shasum":"9b3174973363a628aa74501164f0db1e85a28764","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-1.2.2.tgz","fileCount":7,"unpackedSize":39337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiGQ6pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqxzw/8DJWcbyP7xlNWx7Am0vJG0B5kVcqEQs6qxM+PJzalo9U1sthN\r\nLtL9jt7Mp62sE65jbNeiUrzJ3VrofSKVcv/dCuyaA4/PxELLnavw6+lTZTPh\r\nfZUItMb6HRSm5e2n00FWI+KqnYBYRBGLZR1tRTLBdo53OZtTXpKB3uz6XDRz\r\n+7KavsHs97w328/WqpQHd4YiD1TbtxWZ52OgzlDxr3QVNq2Yy/3R/S1gcBDa\r\ncJ9eYWoVegjxujtyZbCl95KT8cdKTPGZxPOi2zOHPJB4VuM4DUwDDQZ43WWo\r\n3bJ7p7BCYhp7AE+bON0aF0CRVwo+KFXpVxAMPacXRN957oisAaYN17GJ3k18\r\ndPdjwk4YWZNb9fZDYS0c+MCsac3ZxltnjwdhqDEKXB4rwQ8y6exG37rncSq8\r\nK3xnJUSbCuvmoX0XifMedz0mcWK4o3IszVDODYNHSEwM01RE/eAwRT26rXXX\r\nWIFn4OffxIck/CXZuX2kDCxw4yO7dA/W4bS1OG9abVK3bxSyTQKdSTXv8arw\r\nccvuo39MrTsKM8LFZ9rw35qFLdYs+sTAyKSRPWfkqSiJDaJSenlTIV8Q3NRU\r\nmevJ1PbSpPQ4+tMv7ugfGGD4jhPBqotuT//cFkZJ3w4qo6vFw+5I4vAREVz2\r\nWxEVhO3lKVLJAYv6oaH/BkCuVWU1j+ZSTFU=\r\n=uw/j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFmrls9kK7YenF1vTGETH8Gn+zYrUESN8tXbfRd0n/ITAiAt3VoSrswjUoW+z8RFO0rx9/GztXW1yyJ1Sce0RF+TBw=="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_1.2.2_1645809321009_0.42919267868090016"},"_hasShrinkwrap":false},"2.0.0":{"name":"@death_raider/neural-network","version":"2.0.0","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","gitHead":"608221bd8c63671d8317ba5cab2f4161c23a0e9e","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@2.0.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-4qyMH6CTbYYZoNGFXszELJoqfUiMuiBvB0cm/0fqFdeIYd1zmR8gMEZ1bhhXHJrC9mZC0P0Y/oSqQaRibRj8oQ==","shasum":"8192615603b5137df952dd607fa348905e1528d4","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-2.0.0.tgz","fileCount":7,"unpackedSize":50492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJIsjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpuMw/7BIl41IYfRs6cHS+4/PEoKsJxIsHsGVcGOIxguT1olUk/5LQd\r\n7IiF4mkB342ifQWTIfLCd+gFKpAHWRPAtoaN5bsnd22IiYfsCWBN8SUTeDAT\r\nrcnru60fuzOYaFfpulQHeekmYBDZ/ndmNVvYqx1pAsWcMeYhl1Ol4vXSsPEH\r\n0SqVCbK76AHZLhWOkdOeJZ4WTlw3R44T78h7nYdDY+dOJhcmgwO+ilLBSOyv\r\nUORnAYCCrau73gTVQLvhk3CMWg3W/6sN+4DiY2h7MnvTLwvDJsMbaT+46vLq\r\nV6GsoGhtpoRfzHhee29A4zF6MFsOaplttOXVvUxsw7GYxgA29eoan6OaKJVR\r\nz2HqKs43oDyB1e1SV3PuVZ7lMHae8tl2w6w2HHOz9jV9jq5378wck36P84Wu\r\nF7rjhLqOxMMEwjLJR2vlA6FEfx5DRpUjQRht+aNa3jpGZDjfkxQN5frv5Km1\r\ntM/LwxnpOH9o56RO7QSiVFtb7je4F9cG8XTx4/DKYqQCNW4IdCktPEAGBwbQ\r\n3YhX1BAdmdJ3o5tz53wTOSgLn8wFWBJpsNvvpK1LsgnVLhWu/IB7Oxl+4OG8\r\nV7Vzel8dUQxQuCZvrYiJE7FnqoAFOcsRycbUYwrBa4dI3jkhUtj7mShA1rEJ\r\nIOWNcb5k92d9vIOfgM958x1wUnUiZansPMY=\r\n=Fa+p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFIe4uOtl8RDkE/cf6Td38w3x1zh2IzHN5pVx3lDVe0hAiEAwC/ZscKbB0ItnwCxiaZ4JDvo7Ym39h0SpMKn/ieKdBg="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_2.0.0_1646562083685_0.5523487224363122"},"_hasShrinkwrap":false},"2.0.1":{"name":"@death_raider/neural-network","version":"2.0.1","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"homepage":"https://github.com/Death-Raider/Neural-Network#readme","gitHead":"a38fe94306002546a803b4c9b67b43b8f0fa8552","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@2.0.1","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-hNhz8/Cp7fDwpgdjpj9TOYRZYHfXA+BJO0cSj9VYYITy1Ols1aJmtZAwgFuYXPDpgkQ12Ra9AGf/qQX4tKr6MA==","shasum":"d8bf67b88dceae7ff2dc42afa8d052098a304325","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-2.0.1.tgz","fileCount":6,"unpackedSize":43278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNLjrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrsfxAAmuH0kB2CjzttJ9zG8mPlTzkdFmvJyXaRE0d3YQdVsbhqgJ2u\r\nuo4w74jhTo1RWsnzRHppo7Qd0QuZXm59qr+XzwNnRyFdYv/Le9NvrgizHqDy\r\n9cQb5EQi8aPadBILLDz0TcSJSa4fjtFYnCggESOemWN+9ISeDOUkKJAIxp5r\r\n0URzsTQXcMpbzf9KKmPVANiTJm2jg9seZrRbUqwGyBl5BIB6oJqmEmC8+2vz\r\ne/OQeNB+O3XYqHeRIqeFHR8Y6M9vVEC9YoFO68jGmkSV5Jgv4b6hjyz4h4TU\r\nGcpwuWaZq00HtrUQM/2uQuvZFzhSTKDy+23vCtDNdRYxGViwiZ1Fc9f8K8bx\r\np7pje4B8sgCaprs1lYXEZrna4XCHl1eam8n3kPknpvS/4hYJvUXB6A1wSPyx\r\nTo2NMpTKuzNUdN1FhiJPprKoZ4cxCTGtdMynf7Xghm2pwAORMnIMLngpGKBv\r\na+Ug6F8+RVdF6HOiMh08SYNfKoDWfyvve54WGilFgOFPHhfvijfPbtnLiK/I\r\n21eo7PJXdmjqKvCr088iHWgQgpaEBFf+GSdblx4q77mC21G8l58gWoDOu7wI\r\nb+ygPsi1b1qE230hl0wY+a25Odw2QeTfqesWFcVozZlLNsjHSt82/9tg69CK\r\nfwdERpDgq0zZOwn9GXXt63InYDYLcIOUaEw=\r\n=h6Wp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7R4bCorkLxUgHihpebD63CnMKB/guuP+mfhhpWfAx8gIgDJpD6wm7IXGLY5cL2dtSiVNrE/0qM+A4S6KPk92XTK8="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_2.0.1_1647622379243_0.06494587422294673"},"_hasShrinkwrap":false},"2.0.2":{"name":"@death_raider/neural-network","version":"2.0.2","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"scripts":{"test":"node Application.js"},"homepage":"https://github.com/Death-Raider/Neural-Network#readme","gitHead":"d61c190e57cc1e9d5069f23ddcc5f58b2dfbed88","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@2.0.2","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-rRVvrCUksKBvhyLbjmoM+9DTrGNHOSO0KcPuv00OFCxz+N0J2BkiKx5xWq2mqTC3Voy3KYxXUXOTZlgX5rJzzA==","shasum":"ba0acb7d60731420fff2d7b39c357d767ee46cc4","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-2.0.2.tgz","fileCount":6,"unpackedSize":42225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNfCsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpGORAAgYKrUel+hHGYPpbEf2ktUx9xDFmVotD+h/l7DuVg/LHks0//\r\nUtAGiv6/tZ9Y8tuppa0y9jineJwpecZtOh7l+VWmwv835ogJu0oPdcXotO+t\r\nHGz7MmmcA3+IBNW7A/jwkvatFIliddLoDxZkjVFKrOeyhvX/5mqvJt1tsGw5\r\n8HpPy3TDTLZ3UNwoXaM5kZ57Ixti5u324+2+tKNp6RX32tstNCyp49y2Sw36\r\nRWWYUvHND9Jk1RRWb7nhFsp50P93y/hZHGuaK/w7AN7Z9OVeMnHXJePZDQ32\r\nFzb+HEkwY0HsREydRlcTXb1ckTNWA1R4lVXfYCQ5NOp2WOuv6FuV0j9G9jTJ\r\njbWFVX1G440nSHWzEptS7FnXVqZUDH2rQpmiHRrIDOJ+WNlBPmB2buWwpMPt\r\nM9Xv1F8zj7ItzlGejzn+8dJhCp3JIEYcce/2fyMyJwYI2mFe3DgTsMPOrISf\r\nm2zx/dEDEPDAEho0tiO0coJl2SKoMc/+skPVfig8RcUV6vCJgSLrh57B4Qsy\r\nW35ipvMVHGsXlXIQrLeaXD628pK/IH0CgCJTl1LT4VUj5xnjJs1V9v1TDT2x\r\nEKf4CEuldXGbvzVvkbVz+6axXSAzXkonYygN4LZWS52dfVNcQ20IztkhxhJs\r\noZOc/gruYoIEkInznZHh1P+6gyJ6Ba/FLgg=\r\n=zixq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWdoNuUhyFcdHV5yAUyT/RXIZrBQHHIvGh71ZnQPEJhAiEA1ZANktyO15I/Hg7yD1HdhjdgFhkwWC3dHwKMTtbdYts="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_2.0.2_1647702188183_0.1113024272060974"},"_hasShrinkwrap":false},"2.0.3":{"name":"@death_raider/neural-network","version":"2.0.3","description":"Simple to use Neural Network","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"main":"Neural-Network.js","keywords":["AI","npm","package","machine learning","neural network"],"scripts":{"test":"node Application.js"},"homepage":"https://github.com/Death-Raider/Neural-Network#readme","gitHead":"33c6164a570732465a980d79b7cb167ddeb087d2","bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"_id":"@death_raider/neural-network@2.0.3","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-D5+3z0b8DsGkT8umSJG5lkapjXMq8bOVAiI6qRNoyCgSxLZySAyz6Q4bwzG+4bf2mtDjfoTzCCD7lVBq5a3KWA==","shasum":"aaec1d85e7eef464b312912b5bccdbe3dbf8f8c6","tarball":"https://registry.npmjs.org/@death_raider/neural-network/-/neural-network-2.0.3.tgz","fileCount":6,"unpackedSize":42215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNfOBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKNxAAoczKNe8BxEUmp3RVc4mMRA93dxI/Ss1XUZZMnm13aKZwOJ8b\r\nj0zsKqpEn0/iwQ0pDv/zDsoSofhE2u2yl5jY0cFLyMelZgxHpDBwdwWV+k+R\r\nG6+uQLR4butNM2ozCuAJq5hblQnGAcZ2p2xtI0JEk6r6iri1vws8QkLFSdae\r\nXVFc+VO2HWbdq+X04bhJn2IKWTYqHiM1gdJTumObxtZKJvC1Q4OWBhCuBgD9\r\nCEOfOJzWcWj/WK+nCboLzTclqg44KoLYeuAEna2ceCPa5PlHxFZbREz3cqpn\r\n+J4eTvkFqzuhLJcTQhrORTbIa81UyAHADZe5uM+bwuLq8yFAlS9u9F/9WHfM\r\nZ8OOYJE+wyqJP2xQhzWtcmxyd7Mx4CmjO+ZUZdabNbgXmubufZe9wRJp4a/I\r\naojKZtjXg+h7lo+VEYkO8Ns6M9HP4DZAxUmWssOJa8ktSRsyyMr+fvGTdvom\r\nZKU8g6bwREgDnnhAmwIGt2h6MwAUalek4pLU0vLEbk4Drf9W82Hs2i1NYiUh\r\ngLOFPBUXYFvG8lKijDyehMvmmlAFEmt9ns63Jck510a/npXpwvzI/lWntk3m\r\nQ7WO33k0FmB9Lamfl0EyAPPa3Pu6pcbZOyzfheymVBhf4IsC+nFZx8qQgJ2Q\r\nByhecLqIPNTSqsZz2qkzs7r53piZGCDe1IA=\r\n=2oCD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEr1Ry+b2ANH9IgRMpkPDR1JSSPZsfrRhrRz41LWjxICAiEA0ZnaM+LMgozKb7f+Ut1bi+aNBuell/LX8qVHZI66vyA="}]},"_npmUser":{"name":"death_raider","email":"oragimirox@gmail.com"},"directories":{},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/neural-network_2.0.3_1647702913226_0.3514892201915183"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-17T15:08:42.286Z","1.0.0":"2020-11-17T15:08:42.421Z","modified":"2022-04-05T03:28:14.545Z","1.1.0":"2020-11-17T15:15:36.777Z","1.1.1":"2020-11-17T15:22:01.816Z","1.1.2":"2020-11-17T17:40:46.267Z","1.2.0":"2020-11-27T07:03:16.784Z","1.2.1":"2020-11-27T07:05:20.544Z","1.2.2":"2022-02-25T17:15:21.151Z","2.0.0":"2022-03-06T10:21:23.859Z","2.0.1":"2022-03-18T16:52:59.428Z","2.0.2":"2022-03-19T15:03:08.324Z","2.0.3":"2022-03-19T15:15:13.422Z"},"maintainers":[{"name":"death_raider","email":"oragimirox@gmail.com"}],"description":"Simple to use Neural Network","homepage":"https://github.com/Death-Raider/Neural-Network#readme","keywords":["AI","npm","package","machine learning","neural network"],"repository":{"type":"git","url":"git+https://github.com/Death-Raider/Neural-Network.git"},"bugs":{"url":"https://github.com/Death-Raider/Neural-Network/issues"},"license":"MIT","readme":"# Neural Network\r\nInstalling\r\n-----------\r\n```\r\nnpm i @death_raider/neural-network\r\n```\r\nAbout\r\n-----\r\nThis is an easy to use Neural Network package with SGD using backpropagation as a gradient computing technique.\r\n\r\nCreating the model\r\n------------------\r\n```js\r\nconst NeuralNetwork = require(\"@death_raider/neural-network\").NeuralNetwork\r\n//creates ANN with 2 input nodes, 1 hidden layers with 2 hidden nodes and 1 output node\r\nlet network = new NeuralNetwork({\r\n  input_nodes : 2,\r\n  layer_count : [2],\r\n  output_nodes :1,\r\n  weight_bias_initilization_range : [-1,1]\r\n});\r\n```\r\nParameters like the activations for hidden layer and output layers are set as leaky relu and sigmoid respectively but can changed\r\n```js\r\n//format for activation function = [ function ,  derivative of function ]\r\nnetwork.Activation.hidden = [(x)=>1/(1+Math.exp(-x)),(x)=>x*(1-x)] //sets activation for hidden layers as sigmoid function\r\n```\r\nTraining, Testing and Using\r\n---------------------------\r\nFor this example we'll be testing it on the XOR function.\r\n\r\nThere are 2 ways we can go about training:\r\n\r\n1) Inbuilt Function\r\n```js\r\nfunction xor(){\r\n  let inp = [Math.floor(Math.random()*2),Math.floor(Math.random()*2)]; //random inputs 0 or 1 per cell\r\n  let out = (inp.reduce((a,b)=>a+b)%2 == 0)?[0]:[1]; //if even number of 1's in input then 0 else 1 as output\r\n  return [inp,out]; //train or validation functions should have [input,output] format\r\n}\r\nnetwork.train({\r\n  TotalTrain : 1e+6, //total data for training (not epochs)\r\n  batch_train : 1, //batch size for training\r\n  trainFunc : xor, //training function to get data\r\n  TotalVal : 1000, //total data for validation (not epochs)\r\n  batch_val : 1, //batch size for validation\r\n  validationFunc : xor, //validation function to get data\r\n  learning_rate : 0.1, //learning rate (default = 0.0000001)\r\n  momentum : 0.9 // momentum for SGD\r\n});\r\n```\r\nThe `trainFunc` and `validationFunc` recieve an input of the batch iteration and the current epoch which can be used in the functions.\r\n\r\n_`NOTE: The validationFunc is called AFTER the training is done`_\r\n\r\nNow to see the avg. test loss:\r\n```js\r\nconsole.log(\"Average Validation Loss ->\",network.Loss.Validation_Loss.reduce((a,b)=>a+b)/network.Loss.Validation_Loss.length);\r\n// Result after running it a few times\r\n// Average Validation Loss -> 0.00004760326022482792\r\n// Average Validation Loss -> 0.000024864418333478723\r\n// Average Validation Loss -> 0.000026908106414283446\r\n```\r\n2) Iterative\r\n```js\r\nfor(let i = 0; i < 10000; i++){\r\n  let [inputs,outputs] = xor()\r\n  let dnn = network.trainIteration({\r\n    input : inputs,\r\n    desired : outputs,\r\n  })\r\n  network.update(dnn.Updates.updatedWeights,dnn.Updates.updatedBias,0.1)\r\n  console.log(dnn.Cost,dnn.layers); //optional to view the loss and the hidden layers\r\n}\r\n// output after 10k iterations\r\n// 0.00022788194782669534 [\r\n//   [ 1, 1 ],\r\n//   [ 0.6856085043616054, -0.6833685003507397 ],\r\n//   [ 0.021348627488749498 ]\r\n// ]\r\n```\r\nThis iterative method can be used for visulizations, dynamic learning rate, etc...\r\n\r\nTo use the network:\r\n```js\r\n// network.use(inputs)  --> returns the hidden node values as well\r\nlet output = [ //truth table for xor gate\r\n  network.use([0,0]),\r\n  network.use([0,1]),\r\n  network.use([1,0]),\r\n  network.use([1,1])\r\n]\r\n```\r\n\r\nTo get the gradients w.r.t the inputs (Questionable correct me if wrong values)\r\n```js\r\nconsole.log( network.getInputGradients() );\r\n```\r\n\r\nSaving and Loading Models\r\n-------------------------\r\nThis package allows to save the hyperparameters(weights and bias) in a file(s) and then unpack them, allowing us to use pretrained models.\r\nSaving the model couldnt be further from simplicity:\r\n```js\r\nnetwork.save(path)\r\n```\r\nLoading the model is asynchronous:\r\n```js\r\nconst {NeuralNetwork} = require(\"@death_raider/neural-network\")\r\nlet network = new NeuralNetwork({\r\n  input_nodes : 2,\r\n  layer_count : [2],\r\n  output_nodes :1,\r\n  weight_bias_initilization_range : [-1,1]\r\n});\r\n(async () =>{\r\n  await network.load(path) //make sure network is of correct structure\r\n  let output = [  \r\n    network.use([0,0]),  // --> returns the hidden node values as well\r\n    network.use([0,1]),  // --> returns the hidden node values as well\r\n    network.use([1,0]),  // --> returns the hidden node values as well\r\n    network.use([1,1])   // --> returns the hidden node values as well\r\n  ]\r\n})()\r\n```\r\n\r\n# Linear Algebra\r\nThis class is not the most optimized as it can be, but the implementation of certain functions are based on traditional methods to solving them. Those functions will be marked with the * symbol.\r\n\r\nBase function\r\n--------------\r\nThe base function (basefunc) is a recursive function that takes in 3 parameters a, b, and Opt where a is an array and b is an object and opt is a function. The basefunc goes over all elements of a and also b if b is an array and then passes those elements to the opt function defined by the user. opt will take in 2 parameters and the return can be any object.\r\n```js\r\nconst {LinearAlgebra} = require(\"@death_raider/neural-network\")\r\nlinearA = new LinearAlgebra\r\nlet a = [\r\n    [1,2,3,4],\r\n    [5,6,7,8]\r\n]\r\nlet b = [\r\n    [8,7,6,5],\r\n    [4,3,2,1]\r\n]\r\nfunction foo(p,q){\r\n    return p*q\r\n}\r\nconsole.log(linearA.basefunc(a,b,foo))\r\n// [ [ 8, 14, 18, 20 ], [ 20, 18, 14, 8 ] ]\r\n```\r\nMatrix Manipulation\r\n--------------------\r\n<ol>\r\n    <li>Transpose(.transpose(matrix))</li>\r\n        It gives the transpose of the matrix (only depth 2).<br /><br />\r\n    <li>Scalar Matrix Product(.scalarMatrixProduct(scalar,matrix))</li>\r\n        It gives a matrix which has been multiplied a scalar. Matrix can be of any depth.<br /><br />\r\n    <li>Scalar Vector Product(.scalarVectorProduct(scalar,vector))</li>\r\n        It gives a vector(array) which has been multipied by a scalar.<br /><br />\r\n    <li>Vector Dot Product(.vectorDotProduct(vec1,vec2))</li>\r\n        It gives the dot product for vectors.<br /><br />\r\n    <li>Matrix vector product(.MatrixvectorProduct(matrix,vector))</li>\r\n        It gives the product of a matrix and a vector.<br /><br />\r\n    <li>Matrix Product(.matrixProduct(matrix1,matrix2))</li>\r\n        It gives the product between 2 matrices.<br /><br />\r\n    <li>Kronecker Product(.kroneckerProduct(matrix1,matrix2))</li>\r\n        It gives the kronecker product of 2 matrices.<br /><br />\r\n    <li>Flip(.flip(matrix))</li>\r\n        It flips the matrix by 180 degrees.<br /><br />\r\n    <li>Minor*(.minor(matrix,i,j))</li>\r\n        It calculates the minor of a matrix given the index of an element.<br /><br />\r\n    <li>Determinant*(.determinant(matrix))</li>\r\n        It calculates the determinant of a matrix using minors.<br /><br />\r\n    <li>Invert Matrix*(.invertMatrix(matrix))</li>\r\n        It inverts the matrix using the cofactors.<br /><br />\r\n    <li>Vectorize(.vectorize(matrix))</li>\r\n        Vectorizes the matrix by stacking the columns.<br /><br />\r\n    <li>im2row & im2col*(.im2row(matrix,[shape_x,shape_y]) / .im2col(matrix,[shape_x,shape_y]))</li>\r\n        Gives the im2row and im2col expansion using a recursive method.<br /><br />\r\n    <li>Reconstruct Matrix(.reconstructMatrix(array,{x:x,y:y,z:z}))</li>\r\n        It gives the matrix of the specificed dimension from a flat array.<br /><br />\r\n    <li>Normalize(.normalize(matrix,lower_limit,upper_limit))</li>\r\n        It gives the normalized version of the matrix between the specified limits.<br /><br />\r\n    <li>Weighted Sum(.weightedSum(weight,matrix1,matrix2,matrix3,...))</li>\r\n        Takes the element from Matrix1 and adds to the element of Matrix2 * weight and then the result is added to the element of Matrix3 * weight and repeated for all given matrices.\r\n</ol>\r\n\r\n#Convolution\r\n------------\r\nThis class can compute the convolution of an 3 dimensional array with a filter of 4 dimensions using the im2row operator, more details can be found <a href=\"https://cs.nju.edu.cn/wujx/paper/CNN.pdf\">here</a>. Aside from convolution, It also provides the Input gradients and updates the filter based on the previous gradients and a learning rate.\r\n\r\n<h3>.convolution(input, filters, reshape, activation)</h3>\r\nInput is a 3 dimensional input of shape CxHxW <br />\r\nFilters is a 4 dimensional input of shape DxCxH'xW' <br />\r\nReshape is bool. If true then it is reshaped into DxH\"xW\" and the activations function is applied to all elements else the output is of shape H\"W\"xD and the columns are stacked of the output to get the H\"W\" <br />\r\n\r\n```js\r\nconst {Convolution, LinearAlgebra} = require(\"@death_raider/neural-network\")\r\nconst conv = new Convolution\r\nlet input = [[\r\n    [0,0,1,1,0,0],\r\n    [0,0,1,1,0,0],\r\n    [1,1,1,1,1,1],\r\n    [1,1,1,1,1,1],\r\n    [0,0,1,1,0,0],\r\n    [0,0,1,1,0,0]\r\n]] // shape ->  1x6x6\r\nlet filter = [\r\n    [[\r\n        [0,1,0],\r\n        [0,1,0],\r\n        [0,1,0]\r\n    ]],\r\n    [[\r\n        [0,0,0],\r\n        [1,1,1],\r\n        [0,0,0]\r\n    ]]\r\n] // shape -> 2x1x3x3\r\noutput = conv.convolution(input,filter,true,(x)=>x)\r\nconsole.log(output)\r\n// [\r\n//   [\r\n//       [ 1, 3, 3, 1 ],\r\n//       [ 2, 3, 3, 2 ],\r\n//       [ 2, 3, 3, 2 ],\r\n//       [ 1, 3, 3, 1 ]\r\n//   ],\r\n//   [\r\n//       [ 1, 2, 2, 1 ],\r\n//       [ 3, 3, 3, 3 ],\r\n//       [ 3, 3, 3, 3 ],\r\n//       [ 1, 2, 2, 1 ]\r\n//   ]\r\n// ]\r\n```\r\n<h3>.layerGrads(PreviousGradients)</h3>\r\nPreviousGradients has shape H\"W\"xD which is same has shape of output if reshape is false in the above convolution.<br />\r\nReturns a matrix of shape CxHxW <br />\r\n\r\n```js\r\nlet fake_grads = [\r\n    [0,0],[1,0],[0,1],[1,1],[0,0],[1,0],[0,1],[1,0],\r\n    [0,0],[1,1],[0,1],[1,0],[0,1],[1,0],[0,1],[1,0]\r\n]\r\nlet next_layer_grads = conv.layerGrads(fake_grads)\r\nconsole.log(next_layer_grads)\r\n// [\r\n//   [\r\n//     [ 0, 0, 0, 0, 0, 0 ],\r\n//     [ 0, 1, 1, 2, 2, 1 ],\r\n//     [ 0, 1, 2, 2, 2, 0 ],\r\n//     [ 1, 4, 5, 5, 4, 1 ],\r\n//     [ 1, 2, 2, 1, 1, 0 ],\r\n//     [ 0, 1, 1, 1, 1, 0 ]\r\n//   ]\r\n// ]\r\n```\r\nIf u have PreviousGradients of shape DxH\"xW\" then you can do this to convert into that format using the LinearAlgebra class\r\n```js\r\nlet fake_grads = [\r\n    [\r\n        [0,1,1,0],\r\n        [0,1,1,0],\r\n        [0,1,1,0],\r\n        [0,1,1,0]\r\n    ],\r\n    [\r\n        [0,0,0,0],\r\n        [1,1,1,1],\r\n        [1,1,1,1],\r\n        [0,0,0,0]\r\n    ]\r\n]\r\nconst La = new LinearAlgebra\r\nfake_grads = La.vectorize(fake_grads)\r\nfake_grads = La.reconstructMatrix(fake_grads,{x:4*4,y:2,z:1}).flat(1)\r\nfake_grads = La.transpose(fake_grads)\r\nlet next_layer_grads = conv.layerGrads(fake_grads)\r\nconsole.log(next_layer_grads)\r\n// [\r\n//   [\r\n//     [ 0, 0, 1, 1, 0, 0 ],\r\n//     [ 0, 0, 2, 2, 0, 0 ],\r\n//     [ 1, 2, 6, 6, 2, 1 ],\r\n//     [ 1, 2, 6, 6, 2, 1 ],\r\n//     [ 0, 0, 2, 2, 0, 0 ],\r\n//     [ 0, 0, 1, 1, 0, 0 ]\r\n//   ]\r\n// ]\r\n```\r\n<h3>.filterGrads(PreviousGradients, learning_rate)</h3>\r\nPreviousGradients are of the same shape as needed in layer gradient. It updates the filters so nothing else is needed\r\n\r\n```js\r\nconv.filterGrads(fake_grads,0.1)\r\n```\r\n<h3>.saveFilters(folder)</h3>\r\nSaves the filters in text format in Filters.txt in the specified folder\r\n\r\n```js\r\nconv,saveFilters(\"path\")\r\n```\r\n# Max Pool\r\nDoes a max pool on a matrix using the im2row method.<br />\r\n<h3>.pool(inout, size, stride, reshape)</h3>\r\nInput is of shape CxHxW, size and stride are both integers, and reshape is bool.<br />\r\nif reshape is true then output is a matrix, otherwise output will be the vectorized matrix.\r\n\r\n```js\r\nconst {MaxPool} = require(\"@death_raider/neural-network\")\r\nconst mxpool = new MaxPool\r\nlet input = [[\r\n    [0,0,1,1,0,0],\r\n    [0,0,1,1,0,0],\r\n    [1,1,1,1,1,1],\r\n    [1,1,1,1,1,1],\r\n    [0,0,1,1,0,0],\r\n    [0,0,1,1,0,0]\r\n]] // shape ->  1x6x6\r\n\r\nlet output = mxpool.pool(input)//other arguments default to 2,2,and true\r\nconsole.log(output)\r\n// [\r\n//     [\r\n//         [ 0, 1, 0 ],\r\n//         [ 1, 1, 1 ],\r\n//         [ 0, 1, 0 ]\r\n//     ]\r\n// ]\r\n```\r\n<h3>.layerGrads(PreviousGradients)</h3>\r\nPreviousGradients are of the same shape as needed in the convolution class. The output of the function is the layer gradient of the same format.\r\n\r\n```js\r\nlet fake_grads = [\r\n    [ 0 ], [ 1 ],\r\n    [ 0 ], [ 1 ],\r\n    [ 5 ], [ 1 ],\r\n    [ 0 ], [ 1 ],\r\n    [ 0 ]\r\n]\r\nlet input_grads = mxpool.layerGrads(fake_grads)\r\nconsole.log(input_grads);\r\n// [\r\n//   [ 0 ], [ 0 ], [ 1 ], [ 0 ], [ 0 ],\r\n//   [ 0 ], [ 0 ], [ 0 ], [ 0 ], [ 0 ],\r\n//   [ 0 ], [ 0 ], [ 1 ], [ 0 ], [ 5 ],\r\n//   [ 0 ], [ 1 ], [ 0 ], [ 0 ], [ 0 ],\r\n//   [ 0 ], [ 0 ], [ 0 ], [ 0 ], [ 0 ],\r\n//   [ 0 ], [ 1 ], [ 0 ], [ 0 ], [ 0 ],\r\n//   [ 0 ], [ 0 ], [ 0 ], [ 0 ], [ 0 ],\r\n//   [ 0 ]\r\n// ]\r\n```\r\n<h3>.savePool(foler)</h3>\r\nLike the .saveFilters function, this function also saves the pooling details needed for the layerGrads function but its not necessary to save these details and it wont have an effect on the learning of the network but is there just to see how the pooling is being done\r\n\r\n```js\r\nmxpool.savePool(\"path\")\r\n```\r\n\r\n#Application of CNN\r\n--------------------\r\nIn the Application.js file, I have created a simple CNN for mnist number recognition but there are more modules needed to install first.\r\n\r\n```cmd\r\nnpm install mnist cli-progress\r\npip install numpy matplotlib\r\n```\r\n\r\n#Future Updates\r\n--------------\r\n1) Convolution and other image processing functions    ✔️done\r\n2) Convolutional Neural Network (CNN)    ✔️ done\r\n3) Visualization of Neural Network     ❌ pending (next)\r\n4) Recurrent Neural Network (RNN)     ❌ pending\r\n5) Long Short Term Memory (LSTM)    ❌ pending\r\n","readmeFilename":"README.md"}