Mind.prototype.setup = function(examples) { this.weights = []; // input > hidden this.weights.push( Matrix({ rows: examples.input[0].length, columns: this.hiddenUnits, values: sample }) ); // hidden > hidden for (var i = 1; i < this.hiddenLayers; i++) { this.weights.push( Matrix({ rows: this.hiddenUnits, columns: this.hiddenUnits, values: sample }) ); } // hidden > output this.weights.push( Matrix({ rows: this.hiddenUnits, columns: examples.output[0].length, values: sample }) ); };
function normalize(data) { var ret = { input: [], output: [] }; for (var i = 0; i < data.length; i++) { var datum = data[i]; ret.output.push(datum.output); ret.input.push(datum.input); } ret.output = Matrix(ret.output); ret.input = Matrix(ret.input); return ret; }
Matrix.prototype.transform = function(fn) { var result = Matrix({ rows: this.numRows, columns: this.numCols }); for (var i = 0; i < result.numRows; i++) { for (var j = 0; j < result.numCols; j++) { result[i][j] = fn(this[i][j]); } } return result; };
Matrix.multiplyScalar = function(m1, num) { var result = Matrix({ rows: m1.numRows, columns: m1.numCols }); for (var i = 0; i < m1.numRows; i++) { for (var j = 0; j < m1.numCols; j++) { result[i][j] = m1[i][j] * num; } } return result; };
Matrix.prototype.transpose = function() { var result = Matrix({ rows: this.numCols, columns: this.numRows }); for (var i = 0; i < this.numCols; i++) { result[i] = []; for (var j = 0; j < this.numRows; j++) { result[i][j] = this[j][i]; } } return result; };
Matrix.multiplyElements = function(m1, m2) { var result = Matrix({ rows: m1.numRows, columns: m1.numCols }) for (var i = 0; i < m1.numRows; i++) { result[i] = []; for (var j = 0; j < m1[i].length; j++) { result[i][j] = m1[i][j] * m2[i][j]; } } return result; };
Matrix.multiply = function(m1, m2) { var result = Matrix({ rows: m2.numRows, columns: m1.numCols }); for (var i = 0; i < m2.numRows; i++) { result[i] = []; for (var j = 0; j < m1.numCols; j++) { var sum = 0; for (var k = 0; k < m1.numRows; k++) { sum += m1[k][j] * m2[i][k]; } result[i][j] = sum; } } return result; };
Mind.prototype.predict = function(input) { var results = this.forward({ input: Matrix([input]) }); return results[results.length - 1].result[0]; };