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; } } }
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); } }
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; } }
public void BuildWeightMatrixOutputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer) { weightMatrixes.Add(new Tuple <int, int, double[, ]>( 1, 2, new double[radialBasisFunctionLayer.Neurons, radialBasisFunctionLayer.Neurons])); }
public void AddOutputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer) { outputRadialBasisFunctionLayer = radialBasisFunctionLayer; BuildWeightMatrixOutputLayer(radialBasisFunctionLayer); }
public void AddHiddenLayer(RadialBasisFunctionLayer radialBasisFunctionLayer) { hiddenRadialBasisFunctionLayer = radialBasisFunctionLayer; BuildWeightMatrix(radialBasisFunctionLayer); }
public void AddInputLayer(RadialBasisFunctionLayer radialBasisFunctionLayer) { inputRadialBasisFunctionLayer = radialBasisFunctionLayer; }