public Matrix calculateWeightUpdates(LayerSensitivity layerSensitivity, Vector previousLayerActivationOrInput, double alpha, double momentum) { Layer layer = layerSensitivity.getLayer(); Matrix activationTranspose = previousLayerActivationOrInput.transpose(); Matrix momentumLessUpdate = layerSensitivity.getSensitivityMatrix() .times(activationTranspose).times(alpha).times(-1.0); Matrix updateWithMomentum = layer.getLastWeightUpdateMatrix().times( momentum).plus(momentumLessUpdate.times(1.0 - momentum)); layer.acceptNewWeightUpdate(updateWithMomentum.copy()); return updateWithMomentum; }
public Matrix sensitivityMatrixFromSucceedingLayer( LayerSensitivity nextLayerSensitivity) { Layer nextLayer = nextLayerSensitivity.getLayer(); Matrix derivativeMatrix = createDerivativeMatrix(layer .getLastInducedField()); Matrix weightTranspose = nextLayer.getWeightMatrix().transpose(); Matrix calculatedSensitivityMatrix = derivativeMatrix.times( weightTranspose).times( nextLayerSensitivity.getSensitivityMatrix()); sensitivityMatrix = calculatedSensitivityMatrix.copy(); return sensitivityMatrix; }
public static Matrix calculateWeightUpdates( LayerSensitivity layerSensitivity, Vector previousLayerActivationOrInput, double alpha) { Layer layer = layerSensitivity.getLayer(); Matrix activationTranspose = previousLayerActivationOrInput.transpose(); Matrix weightUpdateMatrix = layerSensitivity.getSensitivityMatrix() .times(activationTranspose).times(alpha).times(-1.0); layer.acceptNewWeightUpdate(weightUpdateMatrix.copy()); return(weightUpdateMatrix); }
public Matrix calculateWeightUpdates(LayerSensitivity layerSensitivity, Vector previousLayerActivationOrInput, double alpha, double momentum) { Layer layer = layerSensitivity.getLayer(); Matrix activationTranspose = previousLayerActivationOrInput.transpose(); Matrix momentumLessUpdate = layerSensitivity.getSensitivityMatrix() .times(activationTranspose).times(alpha).times(-1.0); Matrix updateWithMomentum = layer.getLastWeightUpdateMatrix().times( momentum).plus(momentumLessUpdate.times(1.0 - momentum)); layer.acceptNewWeightUpdate(updateWithMomentum.copy()); return(updateWithMomentum); }
public Matrix sensitivityMatrixFromSucceedingLayer( LayerSensitivity nextLayerSensitivity) { Layer nextLayer = nextLayerSensitivity.getLayer(); Matrix derivativeMatrix = createDerivativeMatrix(layer .getLastInducedField()); Matrix weightTranspose = nextLayer.getWeightMatrix().transpose(); Matrix calculatedSensitivityMatrix = derivativeMatrix.times( weightTranspose).times( nextLayerSensitivity.getSensitivityMatrix()); sensitivityMatrix = calculatedSensitivityMatrix.copy(); return(sensitivityMatrix); }
public static Vector calculateBiasUpdates( LayerSensitivity layerSensitivity, double alpha) { Layer layer = layerSensitivity.getLayer(); Matrix biasUpdateMatrix = layerSensitivity.getSensitivityMatrix() .times(alpha).times(-1.0); Vector result = new Vector(biasUpdateMatrix.getRowDimension()); for (int i = 0; i < biasUpdateMatrix.getRowDimension(); i++) { result.setValue(i, biasUpdateMatrix.get(i, 0)); } layer.acceptNewBiasUpdate(result.copyVector()); return(result); }
public Vector calculateBiasUpdates(LayerSensitivity layerSensitivity, double alpha, double momentum) { Layer layer = layerSensitivity.getLayer(); Matrix biasUpdateMatrixWithoutMomentum = layerSensitivity .getSensitivityMatrix().times(alpha).times(-1.0); Matrix biasUpdateMatrixWithMomentum = layer.getLastBiasUpdateVector() .times(momentum).plus( biasUpdateMatrixWithoutMomentum.times(1.0 - momentum)); Vector result = new Vector(biasUpdateMatrixWithMomentum .getRowDimension()); for (int i = 0; i < biasUpdateMatrixWithMomentum.getRowDimension(); i++) { result.setValue(i, biasUpdateMatrixWithMomentum.get(i, 0)); } layer.acceptNewBiasUpdate(result.copyVector()); return(result); }
public Vector calculateBiasUpdates(LayerSensitivity layerSensitivity, double alpha, double momentum) { Layer layer = layerSensitivity.getLayer(); Matrix biasUpdateMatrixWithoutMomentum = layerSensitivity .getSensitivityMatrix().times(alpha).times(-1.0); Matrix biasUpdateMatrixWithMomentum = layer.getLastBiasUpdateVector() .times(momentum).plus( biasUpdateMatrixWithoutMomentum.times(1.0 - momentum)); Vector result = new Vector(biasUpdateMatrixWithMomentum .getRowDimension()); for (int i = 0; i < biasUpdateMatrixWithMomentum.getRowDimension(); i++) { result.setValue(i, biasUpdateMatrixWithMomentum.get(i, 0)); } layer.acceptNewBiasUpdate(result.copyVector()); return result; }
public static Matrix calculateWeightUpdates( LayerSensitivity layerSensitivity, Vector previousLayerActivationOrInput, double alpha) { Layer layer = layerSensitivity.getLayer(); Matrix activationTranspose = previousLayerActivationOrInput.transpose(); Matrix weightUpdateMatrix = layerSensitivity.getSensitivityMatrix() .times(activationTranspose).times(alpha).times(-1.0); layer.acceptNewWeightUpdate(weightUpdateMatrix.copy()); return weightUpdateMatrix; }
public static Vector calculateBiasUpdates( LayerSensitivity layerSensitivity, double alpha) { Layer layer = layerSensitivity.getLayer(); Matrix biasUpdateMatrix = layerSensitivity.getSensitivityMatrix() .times(alpha).times(-1.0); Vector result = new Vector(biasUpdateMatrix.getRowDimension()); for (int i = 0; i < biasUpdateMatrix.getRowDimension(); i++) { result.setValue(i, biasUpdateMatrix.get(i, 0)); } layer.acceptNewBiasUpdate(result.copyVector()); return result; }