Exemple #1
0
        public void SetNeuralNetwork(IFunctionApproximator fapp)
        {
            FeedForwardDeepNeuralNetwork ffnn = fapp as FeedForwardDeepNeuralNetwork;

            if (null == ffnn)
            {
                throw new Exception("Only supporting FeedForwardDeepNeuralNetwork at this stage.");
            }

            this.hiddenLayers = new Layer[ffnn.GetNumberOfHiddenLayers()];
            for (int i = 0; i < hiddenLayers.Length; ++i)
            {
                this.hiddenLayers[i] = ffnn.GetHiddenLayer(i);
            }

            this.outputLayer = ffnn.GetOutputLayer();

            this.hiddenSensitivities = new LayerSensitivity[ffnn.GetNumberOfHiddenLayers()];
            for (int i = 0; i < hiddenLayers.Length; ++i)
            {
                this.hiddenSensitivities[i] = new LayerSensitivity(ffnn.GetHiddenLayer(i));
            }

            this.outputSensitivity = new LayerSensitivity(outputLayer);
        }
        public void SetNeuralNetwork(IFunctionApproximator fapp)
        {
            FeedForwardNeuralNetwork ffnn = fapp as FeedForwardNeuralNetwork;

            this.hiddenLayer       = ffnn.GetHiddenLayer();
            this.outputLayer       = ffnn.GetOutputLayer();
            this.hiddenSensitivity = new LayerSensitivity(hiddenLayer);
            this.outputSensitivity = new LayerSensitivity(outputLayer);
        }
        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 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);
        }
Exemple #7
0
        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);
        }