UNPKG

layerganza

Version:

A feed-forward neural network with injectable layers, activation functions, and optimizers.

47 lines (46 loc) 2.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const OutputLayer_1 = __importDefault(require("./OutputLayer")); class HiddenLayer extends OutputLayer_1.default { setOutputLayer(outputLayer) { this.outputLayer = outputLayer; } backPropagateCalculateErrorGradient() { //Defining these locally speeds up the loop below by reducing object property access let nodeCount = this.nodeCount; let errorGradients = this.errorGradients; let outputs = this.outputs; let activationFunctionDerivative = this.activationFunctionDerivative; let outputLayerNodeCount = this.outputLayer.nodeCount; let outputLayerWeights = this.outputLayer.weights; let outputLayerInputNodeCount = this.outputLayer.inputNodeCount; let outputLayerErrorGradients = this.outputLayer.errorGradients; let inputs = this.inputs; let inputCount = this.inputCount; let inputNodeCount = this.inputNodeCount; let weightErrorGradients = this.weightErrorGradients; // Defining these here ideally speeds up the loop below let inputI; let errorWithRespectToOutput; let activationErrorGradient; let outputI; for (let neuronI = 0; neuronI < nodeCount; neuronI++) { errorWithRespectToOutput = 0; for (outputI = 0; outputI < outputLayerNodeCount; outputI++) { errorWithRespectToOutput += outputLayerErrorGradients[outputI] * outputLayerWeights[outputI * outputLayerInputNodeCount + neuronI]; } activationErrorGradient = errorWithRespectToOutput * activationFunctionDerivative(outputs[neuronI]); errorGradients[neuronI] = activationErrorGradient; for (inputI = 0; inputI < inputCount; inputI++) { weightErrorGradients[neuronI * inputNodeCount + inputI] = inputs[inputI] * activationErrorGradient; } weightErrorGradients[neuronI * inputNodeCount + inputCount] = activationErrorGradient; //Bias node } } } exports.default = HiddenLayer;