Files
2026-07-13 12:49:29 +08:00

65 lines
1.7 KiB
JavaScript

// contains various utility functions
var cnnutil = (function(exports){
// a window stores _size_ number of values
// and returns averages. Useful for keeping running
// track of validation or training accuracy during SGD
var Window = function(size, minsize) {
this.v = [];
this.size = typeof(size)==='undefined' ? 100 : size;
this.minsize = typeof(minsize)==='undefined' ? 20 : minsize;
this.sum = 0;
}
Window.prototype = {
add: function(x) {
this.v.push(x);
this.sum += x;
if(this.v.length>this.size) {
var xold = this.v.shift();
this.sum -= xold;
}
},
get_average: function() {
if(this.v.length < this.minsize) return -1;
else return this.sum/this.v.length;
},
reset: function(x) {
this.v = [];
this.sum = 0;
}
}
// returns min, max and indeces of an array
var maxmin = function(w) {
if(w.length === 0) { return {}; } // ... ;s
var maxv = w[0];
var minv = w[0];
var maxi = 0;
var mini = 0;
for(var i=1;i<w.length;i++) {
if(w[i] > maxv) { maxv = w[i]; maxi = i; }
if(w[i] < minv) { minv = w[i]; mini = i; }
}
return {maxi: maxi, maxv: maxv, mini: mini, minv: minv, dv:maxv-minv};
}
// returns string representation of float
// but truncated to length of d digits
var f2t = function(x, d) {
if(typeof(d)==='undefined') { var d = 5; }
var dd = 1.0 * Math.pow(10, d);
return '' + Math.floor(x*dd)/dd;
}
exports = exports || {};
exports.Window = Window;
exports.maxmin = maxmin;
exports.f2t = f2t;
return exports;
})(typeof module != 'undefined' && module.exports); // add exports to module.exports if in node.js