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

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

01.05.2019, 17:22. Показов 3186. Ответов 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
3409 / 2768 / 751
Регистрация: 25.03.2012
Сообщений: 10,042
Записей в блоге: 1
27.06.2019, 15:04 61
Sukharev_K, чё за датчики? чё за дигностирование?
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
27.06.2019, 15:31  [ТС] 62
Ну это не особо важно, суть в том, что мне нужно решить две задачи с помощью ИНС, эта задача диагностирования и задача прогнозирования, и вот какие ИНС оптимально подходят для решения этих задач.
0
3409 / 2768 / 751
Регистрация: 25.03.2012
Сообщений: 10,042
Записей в блоге: 1
27.06.2019, 15:33 63
Sukharev_K, ну, значит не важно какие ИНС.
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
27.06.2019, 15:43  [ТС] 64
То есть информация о датчиках в корне может поменять тип ИНС?

Добавлено через 54 секунды
Как бэ я ток начинаю с ИНС разбираться, поэтому не судите строго, если эта инфрмация важно для ответа на вопрос, то могу ее предоставить.

Добавлено через 6 минут
На оборудование установлены разные датчики: к примеру датчик вибрации: давления, температуры на поршнях. данные с датчиков в базы данных. На основании значений с датчиков охото решить задачу прогнозирования работоспособности оборудование, т.е. как оно поведет себя в дальнейшем при актуальной работе. Либо определить какой механизм в скором времени выйдет из стря и что то в этом духе.
Насчет задачи диагностирования: По актуальным данным планируется диагностировать правильную работоспособность оборудования, то есть брать информацию с 10-15 датчиков, анализировать ее, и выдавать твет как на данный момент рабтает оборудование.

Добавлено через 50 секунд
Kuzia domovenok, этого достаточно для ответа на вопрос, или еще более подробно все расписать?...
0
3409 / 2768 / 751
Регистрация: 25.03.2012
Сообщений: 10,042
Записей в блоге: 1
27.06.2019, 15:43 65
Sukharev_K, да не, я так болтаю просто, интересно стало
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
27.06.2019, 15:53  [ТС] 66
Kuzia domovenok, ясно
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
28.06.2019, 21:36 67
Цитата Сообщение от Sukharev_K Посмотреть сообщение
Ну это не особо важно, суть в том, что мне нужно решить две задачи с помощью ИНС, эта задача диагностирования и задача прогнозирования, и вот какие ИНС оптимально подходят для решения этих задач
Недавно столкнулся с похожей задачей, но пока что ещё не занимался, поэтому это только мысли. Могу предложить в качестве диагностирующей сети попробовать использовать слои Кохонена, а решающей обычный персептрон. И уже если этот способ не даст результата, то пробовать другие варианты
1
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
28.06.2019, 23:42  [ТС] 68
Albinos, Так наверно и сделаю, тоже думал с кохонена начать в диагностировании. Думал просто может там LSTN с долговременной памятью использовать, но они больше наверно подходят для прогнозирования.
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
24.08.2019, 09:38  [ТС] 69
Доброго времени суток!)
Тут возник у меня один вопрос, а возможно ли на вход НС подавать сразу 2-5 векторов к примеру?
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
24.08.2019, 11:57 70
Доброго) А чего нужно добиться?
0
0 / 0 / 0
Регистрация: 01.05.2019
Сообщений: 40
24.08.2019, 12:01  [ТС] 71
В качестве одного входного вектора я хочу рассмотреть данные с одного датчика, тоесть, к примеру один вектор будет иметь 10 значений, списанных с одного датчика) Второй вектор имеет 10 значений с другого датчика. И чтобы в иделе на вход поступала к примеру три разных вектора параллельно, и система из параллельно анализировала.)
А еще более глобальный вопрос меня сейчас еще волнует, это что такое сети кохонена и с чем их едят, а именно..:
"Доброго времени суток, не могу решать один вопрос, стал разбираться с сетями Кохонена и не могу найти понятную графическую иллюстрацию сетей. В идеале хотелось бы увидеть нейронную схему сетей кохонена, изображенную в стандартной форме нейронных сетей, ну то есть изображенную кружочками и стрелками. Может быть кто то может мне ее нарисовать или же скинуть ссылку. Хочу понять весь путь входных данных как они идут в сетях Кохонена, и так же как изменяются веса слоев в сетях кохонена, в плане по каким формулам. "
0
21 / 16 / 5
Регистрация: 22.06.2015
Сообщений: 68
25.08.2019, 13:56 72
Цитата Сообщение от Sukharev_K Посмотреть сообщение
и система из параллельно анализировала.)
Не очень понятно, что имеется ввиду под параллельно анализировала.

По поводу сетей Кохонена- графически оно выглядит так же) А по внутреннему устройству - кину ссылку в лс
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2019, 13:56

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

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

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

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

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


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

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

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