Пример #1
0
 private void Backpropagate(RadialBasisFunctionLayer outputRadialBasisFunctionLayer,
                            RadialBasisFunctionLayer hiddenRadialBasisFunctionLayer, double outputValue, int layer)
 {
     double[,] weightMatrix = null;
     foreach (var matrix in weightMatrixes)
     {
         if (matrix.Item2 == outputRadialBasisFunctionLayer.Layer)
         {
             weightMatrix = matrix.Item3;
             break;
         }
     }
     for (int i = 0; i < outputRadialBasisFunctionLayer.Values.Count(); i++)
     {
         for (int j = 0; j < hiddenRadialBasisFunctionLayer.Values.Count(); j++)
         {
             var tk      = (double)outputValue;
             var ok      = outputRadialBasisFunctionLayer.Values[i];
             var oj      = hiddenRadialBasisFunctionLayer.Values[j];
             var sigmak  = ok * (1 - ok) * (tk - ok);
             var deltaWk = LearningRate * sigmak * oj;
             weightMatrix[j, i] += deltaWk;
         }
     }
 }
Пример #2
0
 private void ClassifyOutputLayer(RadialBasisFunctionLayer hiddenRadialBasisFunctionLayer, RadialBasisFunctionLayer outputRadialBasisFunctionLayer)
 {
     double[,] weightMatrix = null;
     foreach (var matrix in weightMatrixes)
     {
         if (matrix.Item1 == hiddenRadialBasisFunctionLayer.Layer - 1)
         {
             weightMatrix = matrix.Item3;
         }
     }
     for (int i = 0; i < outputRadialBasisFunctionLayer.Values.Count(); i++)
     {
         double summe = 0.0;
         for (int j = 0; j < hiddenRadialBasisFunctionLayer.Values.Count(); j++)
         {
             summe += hiddenRadialBasisFunctionLayer.Values[j] * weightMatrix[j, i]; //j, i];
         }
         outputRadialBasisFunctionLayer.Values[i] = outputRadialBasisFunctionLayer.ActivationFunction_.ActivationFunction(summe);
     }
 }
Пример #3
0
 private void ClassifyHiddenLayer(RadialBasisFunctionLayer inputRadialBasisFunctionLayer, RadialBasisFunctionLayer hiddenRadialBasisFunctionLayer)
 {
     for (int i = 0; i < hiddenRadialBasisFunctionLayer.Values.Count(); i++)
     {
         var sigma      = 0.0;
         var sigmaSumme = 0.0;
         var expression = 0.0;
         for (int j = 0; j < inputRadialBasisFunctionLayer.Values.Count(); j++)
         {
             var xj = inputRadialBasisFunctionLayer.Values[j];
             var cj = 0.0;
             if (hiddenRadialBasisFunctionLayer.Cetroids[i] != null)
             {
                 cj = hiddenRadialBasisFunctionLayer.Cetroids[i][j];
             }
             sigmaSumme += (xj - cj) * (xj - cj);
         }
         var smallSigma = hiddenRadialBasisFunctionLayer.Sigmoids[i];
         expression = -1 * sigmaSumme / 2 * smallSigma * smallSigma;
         sigma      = Math.Pow(Math.E, expression);
         hiddenRadialBasisFunctionLayer.Values[i] = sigma;
     }
 }
Пример #4
0
 public void BuildWeightMatrixOutputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer)
 {
     weightMatrixes.Add(new Tuple <int, int, double[, ]>(
                            1, 2, new double[radialBasisFunctionLayer.Neurons, radialBasisFunctionLayer.Neurons]));
 }
Пример #5
0
 public void AddOutputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer)
 {
     outputRadialBasisFunctionLayer = radialBasisFunctionLayer;
     BuildWeightMatrixOutputLayer(radialBasisFunctionLayer);
 }
Пример #6
0
 public void AddHiddenLayer(RadialBasisFunctionLayer radialBasisFunctionLayer)
 {
     hiddenRadialBasisFunctionLayer = radialBasisFunctionLayer;
     BuildWeightMatrix(radialBasisFunctionLayer);
 }
Пример #7
0
 public void AddInputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer)
 {
     inputRadialBasisFunctionLayer = radialBasisFunctionLayer;
 }