Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
1

Нейронные сети на C++

01.05.2019, 17:22. Показов 3256. Ответов 71
Метки нет (Все метки)

Доброго времени суток. Решил начать изучать нейронки, попытался обучить нейросеть с обратным распространением ошибки. Обучение с учителем. Так вот, почему то когда в целевом векторе значение 0, тогда ошибка нейросети уменьшается, а при 1 увеличивается, вроде все как по учебнику делал. ПОмогите разобраться.
Для того чтобы понять правильно ли обучается сеть я решил не загружать много данных, а посмотреть как ведет себя программа на 30 парах, но как я понимаю, она ведет себя не так, как хотелось бы.
в коде много грязи и он не дописан, вплане условий, мне главное сейчас понять, как сделать так, чтобы сеть обучалась правильно, а потом уже буду основательно его переделывать. Что я делаю не правильно на данный момент, подскажите.
Вот код:
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
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
//#include <graphics.h>
#include <conio.h>  // getch
#include <ctype.h>
#include <iostream>
#include <cmath> 
#include <ctime>
using namespace std;
float activ_fun(float NET)
{
    return 1 / (1 + exp(-NET));
}
float proizvod_activ_fun(float OUT)
{
    return OUT*(1 - OUT);
}
int main()
{
    
    float w1_1 = 0.3273, w1_2 = 0.2834, w1_3 = 0.5329;
    float w2_1 = 0.3542, w2_2 = 0.4374, w2_3 = 0.3202;
    float h = 0.6, cel = 0, delta_1 = 0, correctirovka_1 = 0, delta_2 = 0, correctirovka_2 = 0;
    float b1_1 = 0, b1_2 = 0, b1_3 = 0, b2_1 = 0;
    float vxod[27] = { 1.525296838, 0.464641648, 1.730666158, 0.267464594, 1.56444614,
                       0.526441276, 1.708979066, 0.648323876, 1.197653903, 0.075771303, 1.349625674,
                       0.394258738,1.400553145, 0.465213867, 1.525869057, 0.709551285,1.708979066, 
                       0.708406848, 1.709551285,0.647751657, 1.930666158, 0.267464594, 
                       1.56444614,0.197653903, 1.075771303, 0.394258738,1.400553145 };
    float vyxod[27] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
    for (int i = 0; i < 27; i++)
    {
        b1_1 = vxod[i] * w1_1;
        b1_2 = vxod[i] * w1_2;
        b1_3 = vxod[i] * w1_3;
        b1_1 = activ_fun(b1_1);
        b1_2 = activ_fun(b1_2);
        b1_3 = activ_fun(b1_3);
        b2_1 = b1_1*w2_1 + b1_2*w2_2 + b1_3*w2_3;
        b2_1 = activ_fun(b2_1);
        //cout << b2_1;
        cel = vyxod[i] - b2_1;
        cout << cel << endl;
        //if (cel > 0.0005)
        //  {
            delta_1 = -cel* proizvod_activ_fun(b2_1);
            correctirovka_1 = -delta_1*h*b1_1;
            w2_1 = w2_1 + correctirovka_1;
            correctirovka_1 = -delta_1*h*b1_2;
            w2_2 = w2_2 + correctirovka_1;
            correctirovka_1 = -delta_1*h*b1_3;
            w2_3 = w2_3 + correctirovka_1;
 
            //vtorye vesa
            delta_2 = proizvod_activ_fun(b1_1)*delta_1*w2_1;
            correctirovka_2 = -delta_2*vxod[i] * h;
            w1_1 = w1_1 + correctirovka_2;
            delta_2 = proizvod_activ_fun(b1_2)*delta_1*w2_2;
            correctirovka_2 = -delta_2*vxod[i] * h;
            w1_2 = w1_2 + correctirovka_2;
            delta_2 = proizvod_activ_fun(b1_3)*delta_1*w2_3;
            correctirovka_2 = -delta_2*vxod[i] * h;
            w1_3 = w1_3 + correctirovka_2;
            //cout << w1_1 << endl;
            //cout << w1_2 << endl;
            //cout << w1_3 << endl;
            //cout << w2_1 << endl;
            //cout << w2_2 << endl;
            //cout << w2_3 << endl;
         // }
        //else
        //{
        //  break;
        //}
        
        //cout << b2_1<< " ";
    }
    float k = 1.56444614;
    b1_1 = k * w1_1;
    b1_2 = k * w1_2;
    b1_3 = k * w1_3;
    b1_1 = activ_fun(b1_1);
    b1_2 = activ_fun(b1_2);
    b1_3 = activ_fun(b1_3);
    b2_1 = b1_1*w2_1 + b1_2*w2_2 + b1_3*w2_3;
    b2_1 = activ_fun(b2_1);
    cout << b2_1;
    return 0;
}
Добавлено через 3 минуты
Сеть у меня с тремя нейронами в скрытом слое и 1 выходным нейроном.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2019, 17:22
Ответы с готовыми решениями:

Нейронные сети (адаптивные сети)
нужен исходник 3д или 2д адаптивной сетки для небольшого использования в своей работе...

Нейронные сети
Добрый вечер, товарищи. Прошу у вас помощи по нейронным сетям. Есть обучающие выборка, там...

Нейронные сети
Недавно открыл для себя тему нейросетей, и хотел бы спросить ресурс где бы я смог довольствоваться...

Нейронные сети
Добрый вечер! Можете подсказать где есть много примеров по нейронным сетям...? Хотелось бы...

71
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
19.05.2019, 19:00 41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int i = 0; i < 114996; i++)
    {
       testirovanie >> test[i];
    }
    ofstream fout("testik.txt");
   
    for (int i = 0; i<113996; i = i + 30)
    {
        b1_1 = 0;
        b1_2 = 0;
        b1_3 = 0;
        for (int j = i; j - i<30; j++)
        {
            b1_1 = b1_1 + vxod[j] * w1_1[j];
            b1_2 = b1_2 + vxod[j] * w1_2[j];
            b1_3 = b1_3 + vxod[j] * w1_3[j];
Это не вопрос) Не оттуда читаете
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
19.05.2019, 19:05  [ТС] 42
Как это не оттуда понять не могу?..
Вплане цикл не правильно??
А так то вроде по коду я открываю файл test считываю оттуда данные в массив, потом создается файл testik и туда записываются выходные данные. Я где то не прав??...
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
19.05.2019, 19:07 43
Вы открыли файл testirovanie считали данные в test, и больше их не используете. Вместо этого вы снова пытаетесь прочитать из vxod, более того выходите за границу, потому что он размером меньше чем test
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
19.05.2019, 19:08  [ТС] 44
Сейчас выгрузка уже идет числами, прогресс на лицо, однако почему то учится не до прописанной ошибки, и веса выходного слоя одинаковы, это возможно из за того что выборка да неправильная(Это по поводу весов)?)
0
Миниатюры
Нейронные сети на C++  
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
19.05.2019, 19:12 45
Скорее всего, понять в чем ошибка вы сможете только на нормальной выборке. Либо можно увеличить количество эпох для обучения
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
19.05.2019, 19:18  [ТС] 46
Цитата Сообщение от Albinos Посмотреть сообщение
Вы открыли файл testirovanie считали данные в test, и больше их не используете.
Это точно?)) Просто я думал что открыл файл test считал данные в массив и потом выходные значения с нейронки закидываю в testik... А как тогда будет правильно??..
Цитата Сообщение от Albinos Посмотреть сообщение
Вместо этого вы снова пытаетесь прочитать из vxod, более того выходите за границу, потому что он размером меньше чем test
А вот с этим да, лохонулся не по детски...

Добавлено через 1 минуту
аааа, Всеееее

Добавлено через 2 минуты
Я все поняяяял, сори, спасибо)
Создам выборку хорошую обучающую, побалуюсь с ней, и посмотрим какой результат будет.
Спасибо большущие!
ПОка вопросов больше нет))
Спасаете меня в очередной раз!
Премного благодарен!
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 14:54  [ТС] 47
И вот я опять здесь...)
И так, создал хорошую выборку для обучения, не хочет обучаться больше, чем 0.175 при разной скорости обучения и весами выходного слоя.
Так же вот мы стали вводить рандомом веса выходного слоя, но каждый раз в начале всем трем весам присваиваются нули, попробовал ввести их в ручную, на обучение это не особо повлияло..
Подскажите пожалуйста как быть.. После обучения для тестированной выборке присваиваются одинаковые значения получается так..
input- обучающая выборка
output - целевой вектор
Все остальные значения остались прежними..
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>  
#include <ctype.h>
#include <iostream>
#include <cmath> 
#include <ctime>
#include "StdAfx.h"
#include <fstream>
#include <iostream>
using namespace std;
 
float activ_fun(float NET)
{
    return 1 / (1 + exp(-NET));
}
float proizvod_activ_fun(float OUT)
{
    return OUT*(1 - OUT);
}
int main()
{
    srand(time(NULL));
    float w1_1[30], w1_2[30], w1_3[30];
    ifstream kf1("kf1.txt");
    ifstream kf2("kf2.txt");
    ifstream kf3("kf3.txt");
    for (int i = 0; i<30; i++)
    {
        w1_1[i] = 1 / (rand() % 100 + 1);
        w1_2[i] = 1 / (rand() % 100 + 1);
        w1_3[i] = 1 / (rand() % 100 + 1);
 
    }
    //float w2_1 = 0.9542, w2_2 = 0.4374, w2_3 = 0.3202;
    float w2_1 = 1 / (rand() % 100 + 1), w2_2 = 1 / (rand() % 100 + 1), w2_3 = 1 / (rand() % 100 + 1);
    cout << w2_1 << " " << w2_2 << " " << w2_3 << endl;
    float h = 0.01, cel = 0;
    float correctirovka[3];
    float delta[4];
    float b1_1 = 0, b1_2 = 0, b1_3 = 0, b2_1 = 0;
    float cor1_1[30], cor1_2[30], cor1_3[30];
    ifstream inp("input.txt");
    ifstream output("output.txt");
    float vxod[1110], vyxod[37];
    for (int i = 0; i < 1110; i++)
    {
        inp >> vxod[i];
    }
    for (int i = 0; i < 37; i++)
    {
        output >> vyxod[i];
    }
    for (int j = 0; j < 10000; ++j)
    {
        int f = 0;
        cel = 0;
        for (int i = 0; i < 1110; i = i + 30)
        {
            b1_1 = 0;
            b1_2 = 0;
            b1_3 = 0;
            for (int k = i; k<30; k++)
            {
                b1_1 += vxod[k + i] * w1_1[k];
                b1_2 += vxod[k + i] * w1_2[k];
                b1_3 += vxod[k + i] * w1_3[k];
            }
            b1_1 = activ_fun(b1_1);
            b1_2 = activ_fun(b1_2);
            b1_3 = activ_fun(b1_3);
 
            b2_1 = b1_1*w2_1 + b1_2*w2_2 + b1_3*w2_3;
            b2_1 = activ_fun(b2_1);
            cel += (vyxod[f] - b2_1) * (vyxod[f] - b2_1);
 
            //
            delta[0] = -2 * (vyxod[f] - b2_1) * proizvod_activ_fun(b2_1);
 
 
            // 
            delta[1] = 2 * proizvod_activ_fun(b1_1)*delta[0] * w2_1;
            delta[3] = 2 * proizvod_activ_fun(b1_3)*delta[0] * w2_3;
            delta[2] = 2 * proizvod_activ_fun(b1_2)*delta[0] * w2_2;
            for (int q = 0; q<30; q++)
            {
                cor1_1[q] = -delta[1] * vxod[i + q] * h;
                cor1_2[q] = -delta[2] * vxod[i + q] * h;
                cor1_3[q] = -delta[3] * vxod[i + q] * h;
            }
            for (int w = 0; w<30; w++)
            {
                w1_1[w] = w1_1[w] + cor1_1[w];
                w1_2[w] = w1_2[w] + cor1_2[w];
                w1_3[w] = w1_3[w] + cor1_3[w];
            }
            // 
            correctirovka[0] = -delta[0] * h*b1_1;
            correctirovka[1] = -delta[0] * h*b1_2;
            correctirovka[2] = -delta[0] * h*b1_3;
 
            //
            w2_1 = w2_1 + correctirovka[0];
            w2_2 = w2_2 + correctirovka[1];
            w2_3 = w2_3 + correctirovka[2];
            f++;
        }
        cout << cel / 37 << endl;
        if ((cel / 37) < 0.0002)
            break;
 
    }
    cout << w2_1 << " " << w2_2 << " " << w2_3 << endl;
    // 
    float test[114996];
    ifstream testirovanie("test.txt");
    for (int i = 0; i < 114996; i++)
    {
        testirovanie >> test[i];
    }
    ofstream fout("testik.txt");
 
    for (int i = 0; i<113996; i = i + 30)
    {
        b1_1 = 0;
        b1_2 = 0;
        b1_3 = 0;
        for (int k = i; k<30; k++)
        {
            b1_1 += test[k + i] * w1_1[k];
            b1_2 += test[k + i] * w1_2[k];
            b1_3 += test[k + i] * w1_3[k];
        }
        b1_1 = activ_fun(b1_1);
        b1_2 = activ_fun(b1_2);
        b1_3 = activ_fun(b1_3);
        b2_1 = b1_1*w2_1 + b1_2*w2_2 + b1_3*w2_3;
        b2_1 = activ_fun(b2_1);
        fout << b2_1 << endl;
    }
    fout.close();
    return 0;
}
0
Миниатюры
Нейронные сети на C++   Нейронные сети на C++  
Вложения
Тип файла: txt input.txt (14.0 Кб, 1 просмотров)
Тип файла: txt output.txt (111 байт, 1 просмотров)
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 14:59  [ТС] 48
Так же веса крытого слоя все записываются нулями, но если читать из файла, как я делал по старинке, то на обучение это никак не повлияло, все равно 0.175 и нейросеть ничего не различает..
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
20.05.2019, 17:31 49
Цитата Сообщение от Sukharev_K Посмотреть сообщение
Так же веса крытого слоя все записываются нулями
Инициализация весов 1/(что-то) приводится к int, поэтому 0. надо поправить на
C++
1
1. /(что-то)
Что означают цифры, которые вы подаёте на вход и почему именно столько входов? Вы уверенны, что для заданной задачи нужно именно 3 нейрона?
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 17:36  [ТС] 50
Цифры, подающие на вход означают вибрацию, показания снимаются раз в 2 секунды, цель: нахождение кавитационных режимов т.е. когда значения колеблются выше отметки 6. На прикрепленном рисунке показано то, что я хочу чтобы нейросеть находила.
И я не уверен, что для данной задачи нужно именно 3 нейрона. И я не знаю, как определить, сколько нужно нейронов для реализации данной задачи, взято было рандомно..
0
Миниатюры
Нейронные сети на C++  
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 17:39  [ТС] 51
Ну на рисунке я не четко показал границы, но думаю, суть ясна..

Добавлено через 2 минуты
Почему именно столько входом я тоже не могу аргументировать, просто из выборки 100000 значений выбирал события из 30 элементов, в которых есть кавитационный режим или его нет или есть частично, но присваивал этому событию 1, т.е. что это кавитационный режим.
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
20.05.2019, 18:02 52
Цитата Сообщение от Sukharev_K Посмотреть сообщение
Цифры, подающие на вход означают вибрацию, показания снимаются раз в 2 секунды, цель: нахождение кавитационных режимов т.е. когда значения колеблются выше отметки 6. На прикрепленном рисунке показано то, что я хочу чтобы нейросеть находила
Т.е. вы хотите, чтобы программа выдавала единицу, если значение с датчика больше определенного? Почему обязательно подавать на вход за 30 тактов, а не рассматривать единичный и почему выбрали именно нейронку для решения задачи?
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 18:17  [ТС] 53
Цитата Сообщение от Albinos Посмотреть сообщение
Т.е. вы хотите, чтобы программа выдавала единицу, если значение с датчика больше определенного?
Ну грубо говоря да..
Цитата Сообщение от Albinos Посмотреть сообщение
Почему обязательно подавать на вход за 30 тактов, а не рассматривать единичный
30 тактов это будет наверно варьироваться. Берем несколько тактов за раз для того, чтобы исключить случайные выбросы. То есть чтобы сеть не распознавала такой промежуток: 0.2, 12, 0.3, потому что это не считается за плохую работу оборудования. Может быть для лучшей работы потом будем использовать 5 тактов или 10 к примеру. Это самая большая причина почему так, а не иначе. Ведь за 1 секунду считывается с датчика к примеру 3 значения, и как бы по одному определять это не резон, нужно хотя бы 2-3 секунды брать.
Цитата Сообщение от Albinos Посмотреть сообщение
почему выбрали именно нейронку для решения задачи?
Щас я объяню почему..)
Вообще говоря данную задачу я сейчас решаю для диплома. И чтобы облегчить ее мы берем пока что данные с одного датчика. В будущем же, после написания и сдачи диплома нейросеть будет расширятся, на вход планируется подаваться данные с нескольких датчиков и уже по нескольким датчикам определять работоспособность прибора, прогнозирования его работоспособности и и много еще идей чтобы с помощью них сделать.
На данный момент я понимаю, что данную задачу легче решить с помощью обычной логике, но это во первых не уровень диплома, во вторых в дальнейшем все равно нужно писать нейронку для анализа нескольких датчиков.
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
20.05.2019, 18:33 54
Цитата Сообщение от Sukharev_K Посмотреть сообщение
for (int k = i; k<30; k++)
129 и 64 ые строки надо поменять на:
C++
1
for (int k = 0; k<30; k++)
Цитата Сообщение от Sukharev_K Посмотреть сообщение
cout << cel / 37 << endl; if ((cel / 37) < 0.0002)
109ая, вывод не информативен, у вас наборов прогоняется 1100, а делите на 37

В идеале. сделать так, чтобы оно легче масштабировалось, если вы планируете дальше этим пользоваться.
В 37ой строке тоже поменять инициализацию, через 1./(что-то)
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 19:37  [ТС] 55
Цитата Сообщение от Albinos Посмотреть сообщение
вывод не информативен, у вас наборов прогоняется 1100, а делите на 37
Но ведь делить на 1110 тоже не вариант ведь правильно понимаю?..)
Цитата Сообщение от Albinos Посмотреть сообщение
В идеале. сделать так, чтобы оно легче масштабировалось, если вы планируете дальше этим пользоваться.
Можно немного поподробнее кого масштабировать??) И каким образом это возможно? или о чем почитать?(на будущее)

Добавлено через 20 минут
Да, вы совершенно правы, не правильно накапливаю ошибку, дома сегодня вечером все подкорректирую постараюсь придумать и отпишу конечный код и что как работает, спасибо большое! Блин, что бы я без тебя делал, у меня уже безысходность была))))
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
20.05.2019, 20:19 56
Цитата Сообщение от Sukharev_K Посмотреть сообщение
Но ведь делить на 1110 тоже не вариант ведь правильно понимаю?..)
Неправильно, как раз на количество наборов делить и надо. Средне арифметическая ошибка)
Цитата Сообщение от Sukharev_K Посмотреть сообщение
Можно немного поподробнее кого масштабировать??) И каким образом это возможно? или о чем почитать?(на будущее)
Как вариант класс с нужными полями, который их инициализирует в зависимости от входных требований. Ну либо функция, которая делает то же самое, на вкус и цвет.

Не по теме:

Цитата Сообщение от Sukharev_K Посмотреть сообщение
Блин, что бы я без тебя делал, у меня уже безысходность была))))
Диплом и с ошибками сдать можно))

0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
20.05.2019, 21:42  [ТС] 57
Цитата Сообщение от Albinos Посмотреть сообщение
Неправильно, как раз на количество наборов делить и надо. Средне арифметическая ошибка)
пока ехал понял, так все же правильно тогда получается? у меня цикл не 1110 раз проходит, а всего 37, все 37 раз накапливается сумма, поэтому на 37 я и делю?) У меня же там в цикле i=i+30.
Цитата Сообщение от Albinos Посмотреть сообщение
Как вариант класс с нужными полями, который их инициализирует в зависимости от входных требований. Ну либо функция, которая делает то же самое, на вкус и цвет
Да, я согласен, в ближайшем будущем буду все делать так, просто сейчас в этом не особо разобрался, а делать нужно было, чуть позже после сдачи буду по уму делать)
Цитата Сообщение от Albinos Посмотреть сообщение
Диплом и с ошибками сдать можно))
Можно, однако дело не в дипломе, у меня как бы много идей для написания нейронок, и вот думал, как сесть их изучить, вот и выбрал тему на диплом с нейронками) Это у меня первое знакомство с ними, и важно для меня все сделать правильно и все понять, а не просто сдать диплом и забыть все)
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
20.05.2019, 21:56 58
Цитата Сообщение от Sukharev_K Посмотреть сообщение
пока ехал понял, так все же правильно тогда получается? у меня цикл не 1110 раз проходит, а всего 37, все 37 раз накапливается сумма, поэтому на 37 я и делю?) У меня же там в цикле i=i+30.
Тогда проглядел я и у вас все правильно в этом месте)
0
1149 / 1055 / 166
Регистрация: 19.02.2010
Сообщений: 3,187
20.05.2019, 23:12 59
Цитата Сообщение от Sukharev_K Посмотреть сообщение
И я не знаю, как определить, сколько нужно нейронов для реализации данной задачи, взято было рандомно..
см последнюю треть этого поста https://www.cyberforum.ru/post13586691.html
А рандомно - обычное дилетантство/шарлатанство.
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
27.06.2019, 14:22  [ТС] 60
Итак доброго времени суток. Долгое время я что то не выходил на связь, ну вот пришло время.)
Диплом защищен, но задача не решена. Мне очень нужен совет.
На данный момент планируется переписывать се то, что я на гавнокодил, НО, но есть некоторые вопросы.
Планирую написать 2 нейронные сети для разных датчиков, одна нейросеть будет решать задачу диагностирования, вторая нейросеть будет решать задачу прогнозирования.
Вопрос собственно в том, что для прогнозирования я думаю, лучше разобраться и писать рекуретные нейронные сети, так ведь?
А для диагностирования какие нейросети подходят лучше всего? Дайте пожалуйста совет, ибо сам пока не могу найти на него ответа.
Так же мучает вопрос, я считаю, чтобы хорошо разбираться в нейросетях лучше всего начинать прогать с нуля, без использования библиотек, прав ли я? Каково ваше мнение?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2019, 14:22

Книги по С++ и нейронные сети
Уважаемые форумчане, может кто посоветовать книги (или статьи в интернете) по созданию нейронных...

Капсульные нейронные сети
Здравствуйте! Подскажите, подходит ли фреймворк JUCE для реализации капсульной нейронной сети на...

Нейронные сети(персептрон)
Привет всем. Недавно начал изучать нейронные сети. Понравилось, очень интересно. Хочу...

Нейронные сети. Перцептрон Розенблата
Здравствуйте! Помогите разобраться в коде (напишите комментарии). Уже несколько дней пытался...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.