예제 #1
0
        static int k; //кол-во нейронов в скрытом слое

        #endregion Fields

        #region Constructors

        public Net(int q, double n)
        {
            ///создаем сеть
            k = q;
            net = new Neiron[k];

            int s = 0;
            ///создаем тип-т.е.считать
            for (int i = 0; i < k; i++)
            {
                if (s < 4)
                {
                    X = new double[s + 1];
                    s++;
                }
                else { s = 0; }
                X = Neiron.Norma(X);
                ///////пока ничего не поняла
                double[] qw = new double[window];
                for (int j = 0; j < window; j++)
                {
                    qw[j] = X[j];
                }
                net[i] = new Neiron(qw, k);
            }
        }
예제 #2
0
    /// <summary>
    /// Создание нейронов
    /// </summary>
    public void CreateNeiron()
    {
        massNeiron = new Neiron[amountNeironInLayer.Length][];
        massNeiron[amountLayer - 1] = new NeironInLastLayer[amountNeironInLayer[amountLayer - 1]];
        for (int i = 0; i < amountLayer; i++)
        {
            massNeiron[i] = new Neiron[amountNeironInLayer[i]];
        }

        for (int i = 0; i < amountNeironInLayer[amountLayer - 1]; i++)          //последний слой
        {
            massNeiron[amountLayer - 1][i] = new NeironInLastLayer(amountNeironInLayer[amountLayer - 2]);
        }

        for (int i = 0; i < amountNeironInLayer[0]; i++)          //первый слой
        {
            massNeiron[0][i] = new NeironInFirstLayer(massNeiron[1], i);
        }

        for (int numberLayer = 1; numberLayer < amountLayer - 1; numberLayer++) //скрытые слои
        {
            for (int i = 0; i < amountNeironInLayer[numberLayer]; i++)
            {
                massNeiron[numberLayer][i] = new Neiron(massNeiron[numberLayer + 1], amountNeironInLayer[numberLayer - 1], i);
            }
        }
    }
예제 #3
0
    //Этот метод заносит в память нейрона с именем trainingName
    // новый вариант образа data

    public void SetTraining(string trainingName, int[,] data, Text textPanel)
    {
        Neiron neiron = neironArray.Find(v => v.obj_name.Equals(trainingName));

        if (neiron == null) // если нейрона с таким именем не существует, создадим новыи и добавим
        {                   // его в массив нейронов
            neiron = new Neiron();
            neiron.Clear(trainingName, neironInArrayWidth, neironInArrayHeight);
            neironArray.Add(neiron);
        }
        int countTrainig = neiron.Training(data); // обучим нейрон новому образу

        textPanel.text += ". Вариантов образа в памяти: " + countTrainig.ToString();
    }
예제 #4
0
        // сравниваем погрешность с эпсилон
        public bool Sravn(Neiron c1, double[] c2)
        {
            bool flag = true;
            double buf = 0, max = 0;
            for (int i = 0; i < 9; i++)
            {
                buf = Math.Abs(c1[i] - c2[i]);
                if ((buf) >= eps)
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                max = 0;
                for (int i = 0; i < 9; i++)
                {

                    buf = Math.Abs(c1[i] - c2[i]);
                    if (buf > max)
                    {
                        max = buf;
                    }
                }
                /////////поставить лейбл
                form.label18.Text = max.ToString();
            }

            return flag;
        }
예제 #5
0
        ///что делать с выходным значением??type[]
        public void AlgorithmW(double[][] a, Neiron w0, double nu2, double y, int window)
        {
            Random rand = new Random();
            double[,] temp = new double[k + 1, k]; // хранит частные производные

            int t = 0;
            int i_av = 0;
            double buff = 0;

            do
            {
                double[] x = a[i_av];
                x = Neiron.Norma(x);
                i_av++;

                //определение частных производных
                for (int q = 0; q < 4; q++)
                {
                    ///////вместо x.type должен быть выходной вектор temp[0, q] = Neiron.F(net, w0, x, k, q,window) - x.type[q];
                    temp[0, q] = Neiron.F(net, w0, x, k, q, window) - y;
                }

                for (int i = 0; i < k; i++)
                {
                    for (int q = 0; q < 4; q++)
                    {
                        temp[i + 1, q] = (Neiron.F(net, w0, x, k, q, window) - x.type[q]) * (Neiron.Fi(x, net[i], window));
                    }
                }

                //коррекция весов

                for (int q = 0; q < k; q++)
                {
                    w0.setW(q, w0.getW(q) - nu2 * temp[0, q]);
                }

                for (int i = 0; i < k; i++)
                {
                    for (int q = 0; q < k; q++)
                    {
                        net[i].setW(q, net[i].getW(q) - nu2 * temp[i + 1, q]);
                    }
                }
                t++;
                buff = Neiron.F(net, w0, x, k, 0, window) - x.type[0];
                for (int q = 0; q < 4; q++)
                {
                    if ((Neiron.F(net, w0, x, k, q, window) - x.type[q]) > buff)
                    { buff = Neiron.F(net, w0, x, k, q, window) - x.type[q]; }

                }
                double h = buff * buff / 2;
                //лейбл!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                form.label19.Text = h.ToString();
            }
            while (t < window * k && ((buff * buff / 2) > eps));
        }