Форум программистов, компьютерный форум, киберфорум
C++: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 16.06.2016
Сообщений: 83

Элементарная нейронная сеть

12.04.2018, 03:26. Показов 3548. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, уважаемые программисты.

Хочу попросить у вас помощи в понимании того, каким образом можно реализовать нейронную сеть для моей небольшой задачки. Заранее прошу тапками не кидаться, по этой теме статьи читаю и даже какие-то представления имею, но некоторые моменты хочется попытаться прояснить с вашей помощью.

Итак, задача. Имеется 10 входных параметров, по ним рассчитываются 6 коэффициентов. Далее эти коэффициенты умножаются каждый на свою константу и складываются (либо вычитаются), получается результирующий коэффициент. Этот полученный коэффициент является степенью экспоненты в формуле https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{1+{e}^{-Y}}. На выходе получаем вероятность от 0 до 1. Чтобы было понятнее, приложу код программы, в которой это реализуется:
Код программы
C++ (Qt)
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
#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include "fstream"
#include "string"
#include "iomanip"
using namespace std;
 
int main()
{
    SetConsoleCP(1251); // Чтобы обеспечить адекватный ввод/вывод кириллицы
    SetConsoleOutputCP(1251);
    ofstream seans("Текущий сеанс.txt", ios_base::app); // Создание текстового документа с результатами
    seans << "Организация"<< "\t" <<"1250" << "\t" <<"1240" << "\t" <<"1600" << "\t" <<"2110" << "\t" <<"1200" << "\t" <<"1500" << "\t" <<"1400" << "\t" <<"1300" << "\t" <<"ЗУ"<<"\t"<<"ДБП"<<"\t"<<"Вероятность банкротства"<<"\n";
    cout << " Logit-модель Чессера для определения вероятности банкротства" << endl;
    cout << endl;
    char Ex = 'Y'; // Для возможности повторного запуска программы
    do {
        string firma; // Наименование организации
            cout << " Организация: ";
            getline(cin,firma);
            cout << endl;
        double a, b, c, d, e, f, g, h; // Строки отчетности
        double Zu, Dbp ; // Для определения величины чистых активов
            cout << " Строка 1250: ";
                cin >> a;
            cout << " Строка 1240: ";
                cin >> b;
            cout << " Строка 1600: ";
                cin >> c;
            cout << " Строка 2110: ";
                cin >> d;
            cout << " Строка 1200: ";
                cin >> e;
            cout << " Строка 1500: ";
                cin >> f;
            cout << " Строка 1400: ";
                cin >> g;
            cout << " Строка 1300: ";
                cin >> h;
            cout << endl;
            cout << " Задолженность учредителей по взносам в уставный капитал: ";
                cin >> Zu;
            cout << " Доходы будущих периодов (госпомощь, безвозмедно полученное имущество): ";
                cin >> Dbp;
        double ChA = (c - Zu) - (g + f - Dbp); // Величина чистых активов
        double x1, x2, x3, x4, x5, x6; // Промежуточные коэффициенты
            x1 = (a + b) / c;
            x2 = d / (a + b);
            x3 = (e - f) / c;
            x4 = (g + f) / c;
            x5 = h / ChA;
            x6 = (e - f) / d;
        double Z = -2.034 - 5.24*x1 + 0.0053*x2 - 6.6507*x3 + 4.4009*x4 - 0.0791*x5 - 0.102*x6; // Степень экспоненты
        double P = 1 / (1 + exp(-Z)); // Вероятность банкротства
            cout << endl;
            cout << " Вероятность банкротства: " << P << endl;
            cout << endl;
            cout << " В процентах: " << P * 100 << " %" << endl;
            cout << endl;
                if ( P > 0.8) // Условия для вывода заключения
                {
                    cout << " Критическое финансовое положение" << endl;
                }
                else if (P > 0.6 && P < 0.8)
                {
                    cout << " Предприятие на грани банкротства" << endl;
                }
                else if (P > 0.4 && P < 0.6)
                {
                    cout << " Удовлетворительное финансовое состояние" << endl;
                }
                else if (P > 0.2 && P < 0.4)
                {
                    cout << " Хороший уровень кредитоспособности предприятия" << endl;
                }
                else
                {
                    cout << " Отличное финансовое положение" << endl;
                }
            cout << endl;
            cout << " Провести новое определение (Y / Любая другая клавиша для выхода)?" << endl;
            cout << endl;
            cout << " "; // Пробел перед вводом команды пользователя
            cin >> Ex;
            cout << endl;
            seans << firma << "\t" << fixed << setprecision(0) << a << "\t" << b << "\t" << c << "\t" << d << "\t" << e << "\t" << f << "\t" << g << "\t" << h << "\t" << Zu << "\t" << Dbp << "\t" << setprecision(4) << P <<"\n";
            cin.get(); // Чтобы можно было работать с классом string после 1 прохода цикла
        } while (Ex == 'Y');
    return 0;
}

Мои вопросы:

1. Можно ли получить какой-то профит с того, что результат рассчитывается с помощью сигмоиды, которая у нейросетей является распространенной функцией активации?
2. Возможно ли сделать что-то скорее вроде пародия на нейросеть, в которой веса для нейронов и сами нейроны будут задаваться как обычные переменные, в итоге также будет получен результат от 0 до 1, затем сравниваться с полученным по конкретным формулам (то есть с идеальным, который рассчитывается параллельно) и после этого значения переменных будут корректироваться (такая извращенная коррекция весов получается)?
3. Если пункт 2 возможен, то чем сподручнее будет пользоваться? Есть мысли, что для подобного подойдут массивы.
4. Поскольку такая коррекция весов это все-таки скорее backpropagation, можно ли вместо дельта-функции обойтись обычным модулем разницы?

P.S. Если не поняли чего я вообще хочу, спросите в комментариях пожалуйста, я постараюсь уточнить. Сам не могу представить в голове это как-то не сумбурно.
P.P.S. Буду рад и ссылкам на статьи по сетям, выполняющим похожую задачу.

Всем причастным заранее спасибо! Также прошу прощения за свою безграмотность в данных вопросах. Надеюсь, вы поможете мне от нее избавиться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2018, 03:26
Ответы с готовыми решениями:

Нейронная сеть на c++ - многослойный перцептрон
Уважаемые форумчане нужна ваша помощь с нейронной сетью на c++! На днях захотел написать прогу - многослойный перцептрон на c++, вроде...

Нейронная сеть на с++
Ребята, словом, это программа составлена на borland c++ builder 5. Я её попытался реализовать на VS. ( Не я составлял программу). Но VS...

Линейная нейронная сеть
Доброго времени суток! Можете скинуть пример простейшей нейронной сети на Си/С++, Матлабе, или Java? У меня есть код для матлаба, но не...

3
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
18.04.2018, 23:28
1. Вообще не понял.
2. Можно.
3. Делайте, как Вам удобнее.
4. Лучше не модуль разности брать, а квадрат разности. Ибо величина ошибки (производная для бэкпропа) - таки лучше, чем знак этой ошибки.
1
1 / 1 / 0
Регистрация: 16.06.2016
Сообщений: 83
18.04.2018, 23:52  [ТС]
VTsaregorodtsev, по поводу первого пункта, я имел ввиду, что входные данные как правило пропускаются через функцию активации, то есть нормализуются, с выходными тоже самое. И вот наиболее распространенными для этого функциями являются сигмоида (регрессия), арктангенс и гипертангенс. То есть, в случае с сигмоидой, сеть на выходе будет выдавать значение от 0 до 1, а потом это значение уже нужно интерпретировать под решаемую задачу, то есть сделать действие, обратное нормализации. Но тут нейросеть должна решать задачу, в которой конечный результат также рассчитывается по формуле регрессии, то есть выходное значение от 0 до 1 это как раз то, что нужно. В общем, я тут уже слишком много расписал, не думаю что эту мысль стоит как-то развивать. Спасибо за ответ!
0
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
22.04.2018, 19:58
Цитата Сообщение от dZorro Посмотреть сообщение
входные данные как правило пропускаются через функцию активации, то есть нормализуются, с выходными тоже самое.
Практически никогда такого не делается (случай, когда делается - скажу ниже).
Нормализация чаще всего делается линейным масштабированием исходной области (отрезка) значений переменной в отрезок, который не даёт зашкаливания аргументов нелинейной фунции (выхода на асимптоты, где производная будет нулевой, и обучение поэтому встанет колом), или в отрезок (область значений), который может выдать нелин.функция (это для выходных данных).
Для входов, поэтому, из значений переменных вычитают среднее значение этой переменной и делят на среднее квадратичное отклонение. Для выходов - чуть посложнее формула, надо будет концы отрезка спроецировать на концы другого отрезка.

Через нелинейную функцию пропускать входы - это, например, у меня было 15 лет назад. Чтобы нелинейным масштабированием посильнее раздвинуть друг от друга точки, принадлежащие разным классам, и одновременно поджать хвосты законов распределений (где примеров другого класса нет, поэтому точки можно сдвинуть поближе друг к другу, ибо через них разделяющая поверхность всё равно не будет проходить).
Подробнее про предобработки и про нелинейное масштабирование см
http://neuropro.ru/mypapers/neurcompmag03_1.pdf и http://neuropro.ru/mypapers/neurcompmag05_4.pdf
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2018, 19:58
Помогаю со студенческими работами здесь

Понятие нейронная сеть
У меня возникли некоторые недопонимания в процессе изучения нейронной сети. 1) Как я понял нейронная сеть - это универсальный...

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

Нейронная сеть, обучение с нуля
Нужен совет экспертов с чего начать. Бегло читала про библиотеки ИИ и остановилась на двух tensorflow и caffe2. Пишу на С++, поэтому...

Нейронная сеть для функции
Как написать нейронную сеть для решения такой задачи: У меня есть нейронная сеть. Я хочу ее обучить, например возводить числа в куб. ...

Нейронная сеть, прогнозирование, электроэнергия?!
Здравствуйте, форумчане! Помогите, пожалуйста, написать в кратчайшие сроки программу) Надо спрогнозировать нагрузку на электросеть для...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru