Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 62
1

Почему не обучается нейросеть?

05.04.2020, 17:23. Показов 846. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
 
namespace Нейросеть
{
    class Program
    {
       
 
        static void Main(string[] args)
        {
            Random rn = new Random();
 
            double Sig(double num)
            {
                double exp = Math.Pow(2.7182818284, (num * -1));
                num = 1 / (1 + exp);
                return num;
            }
 
            double[] tz1 = new double[10];
            tz1[0] = 1;
            tz1[1] = 0;
            tz1[2] = 1;
            tz1[3] = 0;
            tz1[4] = 1;
            tz1[5] = 0;
            tz1[6] = 1;
            tz1[7] = 0;
            tz1[8] = 1;
            tz1[9] = 0;
            double[] tz2 = new double[10];
            tz2[0] = 0;
            tz2[1] = 1;
            tz2[2] = 0;
            tz2[3] = 1;
            tz2[4] = 1;
            tz2[5] = 1;
            tz2[6] = 1;
            tz2[7] = 0;
            tz2[8] = 0;
            tz2[9] = 0;
            double[] tz3 = new double[10];
            tz3[0] = 0;
            tz3[1] = 1;
            tz3[2] = 1;
            tz3[3] = 1;
            tz3[4] = 0;
            tz3[5] = 0;
            tz3[6] = 1;
            tz3[7] = 1;
            tz3[8] = 1;
            tz3[9] = 1;
            double[] po = new double[10];
            po[0] = 1;
            po[1] = 0;
            po[2] = 1;
            po[3] = 0;
            po[4] = 1;
            po[5] = 0;
            po[6] = 1;
            po[7] = 0;
            po[8] = 1;
            po[9] = 0;
            double[] ww = new double[3];
            ww[0] = 0.42;
            ww[1] = 0.55;
            ww[2] = 0.89;
            double err;
            /////////////////////////////////////////////////////////////////////////////////////    
            int f = 1;
            int ff = 0;
            int i = 1;
            int ii = 0;
            double[] h = new double [10];
            while (f != ff)
            {
                 i = 0;
                while (i != 10)
                {
                    h[i] = ((tz1[i] + ww[0]) + (tz2[i] + ww[1]) + (tz3[i] + ww[2]));
                    double s = Sig(h[i]);
                    err = po[i] - Sig(h[i]);
                    double sdx = Sig(h[i]) * (1 - Sig(h[i]));
                    double wd = err * sdx;
                    double ddd = tz1[i] * wd * 1000;
                    ww[0] = ww[0] - tz1[i] * wd * 0.1;
                    ww[1] = ww[1] - tz2[i] * wd * 0.1;
                    ww[2] = ww[2] - tz3[i] * wd * 0.1;
                    Console.WriteLine(@"
                   RES: {0:f2}
                  ERROR: {1:f2}
                  WD: {2:f2}
                  WW0: {3:f2}
                  WW1: {4:f2}
                  WW2: {5:f2}
                  DDD: {6}", s, err, wd, ww[0], ww[1], ww[2], ddd);
                    i++;
                    
                }
                ii++;
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2020, 17:23
Ответы с готовыми решениями:

Не обучается нейросеть
Пытаюсь написать многослойный перцептрон для решения задачи XOR. Структура простейшая 2 нейрона...

Неправильно обучается нейросеть
Вопрос, наверное, плохой, но уже не знаю что делать. Пишу нейросеть с 2 входными нейронами, одним...

Почему нейросеть не обучается на векторе, состоящем из единиц?
Добрый вечер. Написал программку, чтобы попробовать реализовать маленькую нейросеть, которая, как...

Нейросеть на FANN ошибка unresolved external '_fann_run' referenced from почему?
#include <fann.h> #include <conio.h> #include <iostream> using namespace std; int main() {...

7
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
06.04.2020, 00:30 2
Цитата Сообщение от Dkfldkfel Посмотреть сообщение
double exp = Math.Pow(2.7182818284, (num * -1));
А напрямую воспользоваться Math.Exp() - религия не позволяет?

Цитата Сообщение от Dkfldkfel Посмотреть сообщение
h[i] = ((tz1[i] + ww[0]) + (tz2[i] + ww[1]) + (tz3[i] + ww[2]));
Веса не добавляются - а домножаются.

Цитата Сообщение от Dkfldkfel Посмотреть сообщение
double s = Sig(h[i]);
err = po[i] - Sig(h[i]);
double sdx = Sig(h[i]) * (1 - Sig(h[i]));
Вместо использования записанного в переменную s значения - обязательно надо три раза повторно вычислить Sig(h[i]) ?

Шаг обучения 0.1 - скорее всего офигенно (на 2-3 порядка) завышен.
Может быть необходим обучаемый вес смещения (bias) - увы, мне лень в трёхмерном пространстве разметить вершины кубика и посмотреть, как там должна пройти разделяющая плоскость (а заодно - лень посмотреть, достаточно ли для этой обучающей выборки линейного разделителя - либо необходимо строить многослойную сетку).
Ну и униполярная сигмоида и нецентрированные (не с нулевым средним) признаки - это негативное влияние на скорость сходимости обучения.
1
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 62
06.04.2020, 10:58  [ТС] 3
А что с Math.Pow ? Униполярная сигмоида ?А как понять ,,завышен на 2-3 порядка "?
0
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
06.04.2020, 11:35 4
Более длинный код (т.е. м.б. отрицательное влияние на его читаемость человеком).
С выходными значениями в интервале [0,1] - а, например, у tanh выход лежит в интервале [-1,1].
Так и понимать - что оптимальное значение может оказаться на уровне 0.001-0.0001.
1
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 62
06.04.2020, 11:57  [ТС] 5
Я её переписал , так лучше ?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
 
namespace ней
{
    class Program
    {
        static void Main(string[] args)
        {
            
            double[] ptz1 = new double[18];
            ptz1[0] = 100;
            ptz1[1] = 0;
            ptz1[2] = 51;
            ptz1[3] = 49;
            ptz1[4] = 15;
            ptz1[5] = 91;
            ptz1[6] = 33;
            ptz1[7] = 65;
            ptz1[8] = 0;
            ptz1[9] = 100;
            ptz1[10] = 60;
            ptz1[11] = 71;
            ptz1[12] = 84;
            ptz1[13] = 0;
            ptz1[14] = 100;
            ptz1[15] = 60;
            ptz1[16] = 71;
            ptz1[17] = 84;
 
            double[] ntz1 = new double[18];
            ntz1[0] = 10;
            ntz1[1] = 0;
            ntz1[2] = 6;
            ntz1[3] = 4;
            ntz1[4] = 5;
            ntz1[5] = 2;
            ntz1[6] = 10;
            ntz1[7] = 0;
            ntz1[8] = 5;
            ntz1[9] = 19;
            ntz1[10] = 5;
            ntz1[11] = 4;
            ntz1[12] = 4;
            ntz1[13] = 5;
            ntz1[14] = 19;
            ntz1[15] = 5;
            ntz1[16] = 4;
            ntz1[17] = 4;
 
            double[] po = new double[18];
            po[0] = 100;
            po[1] = 0;
            po[2] = 0;
            po[3] = 0;
            po[4] = 0;
            po[5] = 100;
            po[6] = 0;
            po[7] = 0;
            po[8] = 0;
            po[9] = 100;
            po[10] = 100;
            po[11] = 100;
            po[12] = 100;
            po[13] = 0;
            po[14] = 100;
            po[15] = 100;
            po[16] = 100;
            po[17] = 100;
            double res;
            double err;
            double sdx;
            double delw;
 
            double pdc;
            double osig;
            double vdc;
            double ws1 =1.3846473226742735;
            double ws2 = 0.7909372635129165;
 
 
            double Sig(double num)
            {
                double exp = Math.Pow(2.7182818284, (num * -1));
                num = 1 / 1 + exp;
                return num;
            }
            int i = 0;
            int v = 0;
           
                i = 0;
                while (i != 18)
                {
                    osig = Sig(po[i]);
                    pdc = Sig(ptz1[i]);
                    vdc = Sig(ntz1[i]);
                    res = (pdc * ws1) + (vdc * ws2);
                    res = Sig(res);
                    err = res - osig;
                    sdx = res * (1 - res);
                    delw = err * sdx;
                    ws1 = ws1 - pdc * delw * 0.01;
                    ws2 = ws2 - vdc * delw * 0.01;
                    Console.WriteLine("RES: {0}\nERROR: {1}\nWS1: {2}\nWS2: {3}\n", res, err, ws1, ws2);
                    i++;
                }
                v++;
            
            
        }
    }
0
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
06.04.2020, 12:09 6
Цитата Сообщение от Dkfldkfel Посмотреть сообщение
так лучше ?
Я на шарпе не пишу, поэтому ХЗ.
0
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 62
06.04.2020, 12:22  [ТС] 7
Ну по технической составляющей это будет работать ?
0
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
06.04.2020, 15:15 8
Цитата Сообщение от Dkfldkfel Посмотреть сообщение
Ну по технической составляющей это будет работать ?
Вряд ли.
Постройте график сигмоидной функции с разметкой оси абсцисс (оси аргумента) - и посмотрите на него. А затем подумайте, какие значения примут входные признаки после пропуска их через сигмоиду (сколько значений признака, бывших исходно разными, превратятся в одно и то же значение).
0
06.04.2020, 15:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2020, 15:15
Помогаю со студенческими работами здесь

Нейронная сеть не обучается
Доброго времени суток. Пытаюсь обучить нейронную сеть в эксель на данных. Формат данных...

Keras сеть с Dropout не обучается
Здравствуйте. Пытаюсь сконструировать перцептрон с архитектурой 64-96-36-24-8-4 для решения...

Нейронная сеть на action script, не обучается
Добрый день, уважаемые! прошу у Вас помощи, ибо 3й день я не могу найти ошибку в написанном мной...

на каком факультете обучается максимальное число студентов
помогите создать запросы))))...и подскажите где можно подробно почитать про такие запросы.... ...

Написал программу для распознавания звуков, обучается
Хочу дать ссылку на сорцы. Это разрешено? Также не знаю в какой раздел форума поместить тему. ...

Определить на каком факультете обучается максимальное число студентов
БД «Списки студентов» 1.FAK(idf,Name,dekan). 2. Group(idG,idK,kurs,name,kilk,kurator)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru