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
JavaScript
;
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