///// <summary> ///// Funkcja y z definicji uzywana do modyfikacji wag neuronow radialnych ///// </summary> ///// <param name="fi"></param> ///// <returns></returns> //private double y(double[] xk) //{ // double result = 0; // foreach( RadialNeuron neu in neuronHiddenLayer) // { // result += neu.fi(neu.u2(xk)); // } // return result; //} /// <summary> /// Gradient funkcji gaussa wzgledem c /// </summary> /// <param name="x"></param> /// <returns></returns> private double[] dE_dc(int nth_Output, int nth_Neuron) { double[] result = new double[documentList[0].GetValues().Count]; RadialNeuron radialNeuron = (RadialNeuron)neuronHiddenLayer[nth_Neuron]; LinearNeuron linerarNeuron = (LinearNeuron)neuronOutputLayer[nth_Output]; double[] inputVector; double exp; //double maxValue; for (int wsp = 0; wsp < result.Length; wsp++) { for (int i = 0; i < documentList.Count; i++) //learningData.DataVectors.Count { inputVector = documentList[i].GetValues().ToArray(); // learningData.InputVectors[i]; exp = Math.Pow(Math.E, -radialNeuron.u2(inputVector) / 2); result[wsp] += (y(linerarNeuron.Weights)[i] - (outputData[nth_Output])[i]) * linerarNeuron.Weights[nth_Neuron] * exp *radialNeuron.u(inputVector, wsp); // Console.WriteLine(y(linerarNeuron.Weights)[i] + " - " + // (learningData.OutputVectors[nth_Output])[i]+ " = " + (y(linerarNeuron.Weights)[i] - // (learningData.OutputVectors[nth_Output])[i])); } } return(result); }
//dodałem TOMEK public static void TestLoad(RadialNetwork rn) { Console.Out.WriteLine(); RadialNeuron.TestLoad((RadialNeuron)rn.neuronOutputLayer[0]); Console.Out.WriteLine(rn.outputLayerNeutonWeights[0][0]); Console.Out.WriteLine(rn.outputData[0][0]); Console.Out.WriteLine(rn.neuronHiddenLayer.Count); Console.Out.WriteLine(rn.neuronOutputLayer.Count); //Console.Out.WriteLine(rn.greenMatrix[0, 0]); }
/// <summary> /// Konstruktor neuronu o okreslonej strukturze /// </summary> /// <param name="hiddenLayerInitNeuronCount">liczba neuronow ukrytych</param> /// <param name="outputLayerNeuronCount">liczba neuronow wyjsciowych</param> public RadialNetwork(int hiddenLayerInitNeuronCount, int outputLayerNeuronCount) { neuronHiddenLayer = new Collection <INeuron>(); neuronOutputLayer = new Collection <INeuron>(); outputLayerNeutonWeights = new List <double[]>(); for (int i = 0; i < hiddenLayerInitNeuronCount; i++) { INeuron r = new RadialNeuron(); neuronHiddenLayer.Add(r); } for (int i = 0; i < outputLayerNeuronCount; i++) { INeuron r = new LinearNeuron(); neuronOutputLayer.Add(r); } }
//dodałem Tomek public static RadialNeuron TestSave() { RadialNeuron rn = new RadialNeuron(); rn.cellCenter = new double[1] { 1.0 }; rn.VectorSize = 1; rn.sigma = new double[1] { 1.0 }; Console.Out.WriteLine(" " + rn.CellCenter[0]); Console.Out.WriteLine(" " + rn.VectorSize); Console.Out.WriteLine(" " + rn.sigma[0]); return(rn); }
//druga proba //private double[] NetworkOutputVector(double[] vector) //{ // return Matrix.Multiply(this.CreateGreenMatrix(), vector); //} #endregion //dodałem TOMEK public static RadialNetwork TestSave() { RadialNetwork rn = new RadialNetwork(); rn.outputLayerNeutonWeights.Add(new double[] { 1.0 }); rn.outputData = new List <double[]>(); rn.outputData.Add(new double[] { 1.0 }); //rn.greenMatrix = new double[1, 1]; //rn.greenMatrix[0, 0] = 2; rn.neuronOutputLayer[0] = (INeuron)RadialNeuron.TestSave(); Console.Out.WriteLine(rn.outputLayerNeutonWeights[0][0]); Console.Out.WriteLine(rn.outputData[0][0]); Console.Out.WriteLine(rn.neuronHiddenLayer.Count); Console.Out.WriteLine(rn.neuronOutputLayer.Count); //Console.Out.WriteLine(rn.greenMatrix[0, 0]); return(rn); }
//dodałem Tomek public static void TestLoad(RadialNeuron rn) { Console.Out.WriteLine(" " + rn.CellCenter[0]); Console.Out.WriteLine(" " + rn.VectorSize); Console.Out.WriteLine(" " + rn.sigma[0]); }