UNPKG

recurrent-js-gpu

Version:

GPU-accelerated Deep Recurrent Neural Networks and LSTMs in Typescript. Ported, object-oriented and refactored version of Andrej Karpathy's recurrent-js (https://github.com/karpathy/recurrentjs)

78 lines 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Assertable_1 = require("./utils/Assertable"); class R extends Assertable_1.Assertable { static randf(min, max) { return Math.random() * (max - min) + min; } static randi(min, max) { return Math.floor(R.randf(min, max)); } static randn(mu, std) { return mu + R.gaussRandom() * std; } static gaussRandom() { if (R.returnV) { R.returnV = false; return R.vVal; } const u = 2 * Math.random() - 1; const v = 2 * Math.random() - 1; const r = u * u + v * v; if (r === 0 || r > 1) { return R.gaussRandom(); } const c = Math.sqrt(-2 * Math.log(r) / r); R.vVal = v * c; R.returnV = true; return u * c; } static fillRandn(m, mu, std) { for (let i = 0; i < m.w.length; i++) { m.w[i] = R.randn(mu, std); } } static fillRand(m, lo, hi) { for (let i = 0; i < m.w.length; i++) { m.w[i] = R.randf(lo, hi); } } static gradFillConst(m, c) { for (let i = 0; i < m.dw.length; i++) { m.dw[i] = c; } } static setConst(arr, c) { for (let i = 0; i < arr.length; i++) { arr[i] = c; } } static zeros(n) { if (typeof (n) === 'undefined' || isNaN(n)) { return []; } if (typeof ArrayBuffer === 'undefined') { const arr = new Array(n); R.setConst(arr, 0); return arr; } else { return new Float64Array(n); } } static maxi(w) { let maxv = w[0]; let maxix = 0; for (let i = 1; i < w.length; i++) { const v = w[i]; if (v > maxv) { maxix = i; maxv = v; } } return maxix; } static sampleWeighted(p) { const r = Math.random(); let c = 0.0; for (let i = 0; i < p.length; i++) { c += p[i]; if (c >= r) { return i; } } this.assert(false, 'wtf'); } } R.returnV = false; R.vVal = 0.0; exports.R = R; //# sourceMappingURL=R.js.map