65 lines
1.7 KiB
JavaScript
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
|
|
|
|
|