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

Простая нейросеть

20.06.2019, 12:39. Показов 8552. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Передо мной стоит задача создать простую нейросеть. Вот начальный код:

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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int x1 = 1; // Начальные условия:
    int x2 = 0;
    int n = 1;
    float O_ideal = 1;
    float E = 0.7;//гиперпараметр, подбирается экспериментально
    float a = 0.3;//гиперпараметр, подбирается экспериментально
    
    float w1 = 0.45; // начальные значения весов нейросети
    float w2 = 0.78;
    float w3 = -0.12;
    float w4 = 0.13;
    float w5 = 1.5;
    float w6 = -2.3;
 
    float H1_input = x1*w1 + x2*w3; // Вычисление весов скрытого слоя:
    float H1_output = 1/(1+pow(2.72, -H1_input));
    float H2_input = x1*w2 + x2*w4;
    float H2_output = 1/(1+pow(2.72, -H2_input));
 
    float O_input = H1_output*w5 + H2_output*w6; //выход сети:
    float O_output = 1/(1+pow(2.72, -O_input));
    float MSE = pow((O_ideal - O_output), 2) / n; // вычисляем значение ошибки
 
cout << "Результат: " << O_output << endl;
    cout << "Ошибка: " << MSE << endl;
 
    float df = (1 - O_output)*O_output; // выполняем обратное распространение ошибки
    float del0 = (O_ideal - O_output)*df;
    float GRAD_w5 = del0*H1_output;
    float del_w5 = E*GRAD_w5;
 
    float GRAD_w6 = del0*H2_output;
    float del_w6 = E*GRAD_w6;
 
    float df_H1 = (1 - H1_output)*H1_output;
    float del_H1 = df_H1*w5*del0;
    float GRAD_w1 = del_H1*x1;
    float del_w1 = E*GRAD_w1 + a*0;
 
    float GRAD_w3 = del_H1*x2;
    float del_w3 = E*GRAD_w3 + a*0;
 
    float df_H2 = (1 - H2_output)*H2_output;
    float del_H2 = df_H2*w6*del0;
    float GRAD_w2 = del_H2*x1;
    float del_w2 = E*GRAD_w2 + a*0;
 
    float GRAD_w4 = del_H2*x2;
    float del_w4 = E*GRAD_w4 + a*0;
 
    w1 = w1 + del_w1; // обновляем веса
    w2 = w2 + del_w2;
    w3 = w3 + del_w3;
    w4 = w4 + del_w4;
    w5 = w5 + del_w5;
    w6 = w6 + del_w6;
 
    return 0;
}
Чтобы это доработать, нужно передать обновленные значения весов w1-w6 в начальные значения, снова все пересчитать (значение ошибки станет меньше), и так повторять до тех пор, пока значение ошибки не станет достаточно мало (например, 5%, это можно указать в условии цикла while).
В консоль нужно вывести весь процесс обучения, то есть последовательность всех промежуточных значений результата нейросети utput и ошибки MSE.
Логически понимаю, это должно выглядеть, только с реализацией немного забуксовал.

Буду признателен за любую помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2019, 12:39
Ответы с готовыми решениями:

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

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

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

1
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,375
22.06.2019, 00:46
Цитата Сообщение от Khatu Посмотреть сообщение
Передо мной стоит задача создать простую нейросеть.
Я бы сказал, что Вы пропустили решение задачи знакомства со стандартным набором сишных библиотечных функций
Иначе бы вместо pow(2.72, вызывали бы готовую функцию exp().

Цитата Сообщение от Khatu Посмотреть сообщение
Чтобы это доработать, нужно передать обновленные значения весов w1-w6 в начальные значения,
Так Вы уже и так изменили значения весов (строки 57-62).
Надо всего-то написать цикл (начало перед строкой 21, закрывающая скобка после строки 62). После строки 32 (чтобы текущая ошибка ушла на экран) вставьте условие, проверяющее значение переменной MSE и, при нужной малой ошибке, делающее брейк цикла.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2019, 00:46
Помогаю со студенческими работами здесь

Такая нейросеть имеет право на жизнь?
Приветствую. Обратился ко мне товарищь с просьбой сделать нейронную сеть, чтобы она обучалась для выбора поставщика (что-то связано с его...

Что такое нейросеть и как ее сделать?
Здравствуйте! Я давно хотел где-нибудь спросить, как можно на C++ создать программу, которую называют &quot;нейросеть&quot; (хотя, к...

Успею ли обучить нейросеть и встроить ее в проект?
Такая, собственно, задача. Нужно обучить простую нейросеть для распознавания и выделения одинаковых объектов на видеопотоке. Есть 9 дней. И...

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

Простая нейросеть
Привет всем! Есть задача: Научить нейросеть ставить диагноз. 1 диагноз - 1 сеть. Сеть 3 слоя: входные нейроны (результаты...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru