Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class NeuralNetwork {
- constructor(inputNodes, hiddenNodes, outputNodes) {
- this.inputNodes = inputNodes;
- this.hiddenNodes = hiddenNodes;
- this.outputNodes = outputNodes;
- this.weights = new Array(inputNodes * hiddenNodes);
- this.biases = new Array(hiddenNodes);
- for (var i = 0; i < inputNodes * hiddenNodes; i++) {
- this.weights[i] = Math.random();
- }
- for (var i = 0; i < hiddenNodes; i++) {
- this.biases[i] = Math.random();
- }
- }
- train(inputs, outputs) {
- // Forward pass
- var hiddenOutputs = new Array(hiddenNodes);
- for (var i = 0; i < inputNodes; i++) {
- for (var j = 0; j < hiddenNodes; j++) {
- hiddenOutputs[j] += inputs[i] * this.weights[i * hiddenNodes + j];
- }
- }
- for (var j = 0; j < hiddenNodes; j++) {
- hiddenOutputs[j] += this.biases[j];
- }
- // Backpropagation
- var error = new Array(outputNodes);
- for (var i = 0; i < outputNodes; i++) {
- error[i] = outputs[i] - hiddenOutputs[i];
- }
- for (var j = 0; j < hiddenNodes; j++) {
- for (var i = 0; i < inputNodes; i++) {
- this.weights[i * hiddenNodes + j] += error[j] * hiddenOutputs[j] * inputs[i];
- }
- }
- for (var j = 0; j < hiddenNodes; j++) {
- this.biases[j] += error[j] * hiddenOutputs[j];
- }
- }
- predict(inputs) {
- // Forward pass
- var hiddenOutputs = new Array(hiddenNodes);
- for (var i = 0; i < inputNodes; i++) {
- for (var j = 0; j < hiddenNodes; j++) {
- hiddenOutputs[j] += inputs[i] * this.weights[i * hiddenNodes + j];
- }
- }
- for (var j = 0; j < hiddenNodes; j++) {
- hiddenOutputs[j] += this.biases[j];
- }
- // Output
- var outputs = new Array(outputNodes);
- for (var j = 0; j < outputNodes; j++) {
- outputs[j] = hiddenOutputs[j];
- }
- return outputs;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement