Example #1
0
        /// <summary>
        /// Gets information about learning neural network process
        /// </summary>
        /// <returns>List of string array</returns>
        public List <String[]> GetInformation()
        {
            List <String[]> list = new List <String[]>();

            list.Add(new String[] { "Liczba wejść", Info.ni.ToString() });
            list.Add(new String[] { "Liczba wyjść", Info.no.ToString() });
            list.Add(new String[] { "Liczba neuronów", Info.nn.ToString() });
            list.Add(new String[] { "Liczba wzorców", Info.np.ToString() });
            list.Add(new String[] { "Liczba wag", Info.nw.ToString() });
            list.Add(new String[] { "MU - wielkość o jaką mogą się zmieniać wagi", Settings.MU.ToString() });
            list.Add(new String[] { "Dolna granica MU", Settings.MUL.ToString() });
            list.Add(new String[] { "Górna granica MU", Settings.MUH.ToString() });
            list.Add(new String[] { "Skala", Settings.Scale.ToString() });
            list.Add(new String[] { "Maksymalna liczba iteracji", Settings.MaxIterations.ToString() });
            list.Add(new String[] { "Maksymalny błąd uczenia", Settings.MaxError.ToString() });
            String tmp = "";

            foreach (var t in Topo)
            {
                tmp += t.ToString() + ", ";
            }
            tmp = tmp.TrimEnd(new char[] { ' ', ',' });
            list.Add(new String[] { "Topografia sieci", tmp });

            tmp = "";
            foreach (var t in TopoIndex)
            {
                tmp += t.ToString() + ", ";
            }
            tmp = tmp.TrimEnd(new char[] { ' ', ',' });
            list.Add(new String[] { "Indeksy topografii sieci", tmp });

            tmp = "";
            FunctionChoice fc = (FunctionChoice)ActivationFunction[0];

            switch (fc)
            {
            case FunctionChoice.BipolarElliotNeuron: tmp = "dwubiegunowa Elliota"; break;

            case FunctionChoice.BipolarNeuron: tmp = "dwubiegunowa"; break;

            case FunctionChoice.LinearNeuron: tmp = "liniowa"; break;

            case FunctionChoice.UnipolarElliotNeuron: tmp = "jednobiegunowa Elliota"; break;

            case FunctionChoice.UnipolarNeuron: tmp = "jednobiegunowa"; break;

            default: tmp = ""; break;
            }
            list.Add(new String[] { "Funkcja aktywacji", tmp });
            list.Add(new String[] { "Liczba prób uczenia/testowania", Trials.ToString() });
            list.Add(new String[] { "Średnia błędów uczenia (RMSE)", FinalRMSE.ToString() });
            list.Add(new String[] { "Średnia błędów testowania (RMSE)", TestRMSE.ToString() });
            list.Add(new String[] { "Średni czas uczenia", AverageLearnTime });
            list.Add(new String[] { "Średni czas testowania", AverageTestTime });
            return(list);
        }
Example #2
0
        /// <summary>
        /// Computes activation function and its derivative
        /// </summary>
        /// <param name="n">int</param>
        /// <param name="net">double - net</param>
        /// <param name="acct">VectorHorizontal - activation matrix</param>
        /// <param name="gain">VectorHorizontal - gain matrix</param>
        /// <returns>FunctionRD - function result</returns>
        /// <remarks>Remember that values are passed by ref to speed up</remarks>
        public static FunctionRD computeFunctionDervative(ref int n, ref double net, ref Activation acct, ref Gain gain)
        {
            FunctionChoice function = (FunctionChoice)(int)acct.Data[0][n];
            FunctionRD     rd       = new FunctionRD();

            switch (function)
            {
            case FunctionChoice.LinearNeuron:    //for output layer
            {
                rd.FunctionResult     = gain.Data[0][n] * net;
                rd.FunctionDerivative = gain.Data[0][n];
            } break;

            case FunctionChoice.UnipolarNeuron:
            {
                rd.FunctionResult     = 1 / (1 + System.Math.Exp(-gain.Data[0][n] * net));
                rd.FunctionDerivative = gain.Data[0][n] * (1 - rd.FunctionResult) * rd.FunctionResult;
            } break;

            case FunctionChoice.BipolarNeuron:    //for hidden layer
            {
                rd.FunctionResult     = System.Math.Tanh(gain.Data[0][n] * net);
                rd.FunctionDerivative = gain.Data[0][n] * (1 - System.Math.Pow(rd.FunctionResult, 2));
            } break;

            case FunctionChoice.BipolarElliotNeuron:
            {
                rd.FunctionResult     = gain.Data[0][n] * net / (1 + gain.Data[0][n] * System.Math.Abs(net));
                rd.FunctionDerivative = 1 / System.Math.Pow((gain.Data[0][n] * System.Math.Abs(net) + 1), 2);
            } break;

            case FunctionChoice.UnipolarElliotNeuron:
            {
                rd.FunctionResult     = 2 * gain.Data[0][n] * net / (1 + gain.Data[0][n] * System.Math.Abs(net)) - 1;
                rd.FunctionDerivative = 2 * gain.Data[0][n] / System.Math.Pow((gain.Data[0][n] * System.Math.Abs(net) + 1), 2);
            } break;

            default:
            {
                throw new NeuralNetworkError(Properties.Settings.Default.FE1);
            }
            }
            return(rd);
        }
Example #3
0
        /// <summary>
        /// Computes activation function
        /// </summary>
        /// <param name="n">int</param>
        /// <param name="net">double - net</param>
        /// <param name="acct">VectorHorizontal - activation matrix</param>
        /// <param name="gain">VectorHorizontal - gain matrix</param>
        /// <returns>double - function result</returns>
        /// <remarks>Remember that values are passed by ref to speed up</remarks>
        public static double computeFunction(ref int n, ref double net, ref Activation acct, ref Gain gain)
        {
            try
            {
                FunctionChoice function = (FunctionChoice)(int)acct.Data[0][n];
                switch (function)
                {
                case FunctionChoice.LinearNeuron:
                {
                    return(gain.Data[0][n] * net);
                }

                case FunctionChoice.UnipolarNeuron:
                {
                    return(1 / (1 + System.Math.Exp(-gain.Data[0][n] * net)));
                }

                case FunctionChoice.BipolarNeuron:
                {
                    return(System.Math.Tanh(gain.Data[0][n] * net));
                }

                case FunctionChoice.BipolarElliotNeuron:
                {
                    return(gain.Data[0][n] * net / (1 + gain.Data[0][n] * System.Math.Abs(net)));
                }

                case FunctionChoice.UnipolarElliotNeuron:
                {
                    return(2 * gain.Data[0][n] * net / (1 + gain.Data[0][n] * System.Math.Abs(net)) - 1);
                }

                default:
                {
                    throw new System.Exception(Properties.Settings.Default.FE1);
                }
                }
            }
            catch (System.Exception ex)
            {
                throw new NeuralNetworkError("Błąd obliczania funkcji aktywacji.", ex);
            }
        }