Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 2
Регистрация: 30.09.2015
Сообщений: 29

Нейронная сеть обратного распространения

13.12.2020, 15:48. Показов 1361. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Начал на днх изучать нейронные сети и хочу сделать простую нейронку. 3 входных слоя - 6 скрытых слоев - 3 выходных слоя. Для примера решил взять такое:
1. Вход [1,0,0] - выход [0,0,1]
2. Вход [0,1,0] - выход [0,1,0]
3. Вход [0,0,1] - выход [1,0,0]
С реализацией начались проблемы. Решил делать на javascript чтобы удобно в браузере отображать данные в случае чего.
Прошу проверить и подсказать насчет правильности моих действий. Делаю с нуля без библиотек, подключил только math.js для удобства. Ссылка на codepen Ниже код с моими комментариями:

JavaScript
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
function sigmoid(z){ //Сигмоид
            var bottom = math.add(1, math.exp(math.multiply(-1, z)));
            return math.dotDivide(1, bottom);
        };
 
var I1 =[
  [1,0,0],
  [0,1,0],        // Входные данные для обучения
  [0,0,1]
];
var I2 =[
  [],
  [],              // Входные данные к каждому из 6 скрытых нейронов
  []
];
var out=[
  [0,0,1],
  [0,1,0],         // Выходные данные для обучения 
  [1,0,0]
]
var W12=[
  [],
  [],              // Веса от входных нейронов к скрытым
  []
];
 
var hl = 6;        // Количество Скрытых нейронов
var il = 3;        // количество входных нейронов
 
for(var k=0;k<il;k++){   // Тут пока k < количества входных нейронов (3 раза)
  for(let i=0;i<hl;i++){ // Тут пока i < количества скрытых нейронов (6 раз)
    W12[k][i]=Number(math.random(1));     //Заполняю все 18 весов рандомными числами от 0 до 1
  }
}
/*
I2=math.multiply(I1[0],W12)
 
for(var k=0;k<il;k++){   // Тут пока k < количества входных нейронов (3 раза)
 
}
*/
I2[0]=math.multiply(I1,W12); //Тут нужно получить значения всех 6 скрытых нейронов чтобы пропустить потом через функцию активации
console.log(I2);
var X2=[]; // Тут будут храниться значения скрытых нейронов после сигмоида
//X2[0] = sigmoid(I2);
Уже на получении значений скрытых нейронов начинается тупняк. Это вот это: I2[0]=math.multiply(I1,W12); Сделал сейчас без цикла, чтобы просто разобраться как оно будет, но все равно нормально понять не могу как мне это делать. А еще насчет весов: я задал им рандомные значения для начала от 0 до 1, не знаю насколько это правильно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2020, 15:48
Ответы с готовыми решениями:

Метод обратного распространения ошибки
Умные люди, подскажите: есть нейронная сеть, 20 входных нейронов, 10 в скрытом слое и 3 выходных правильно ли я считаю ошибку: ...

Алгоритм обратного распространения ошибки
Подскажите как построить алгоритм обратного распространения ошибки с использованием функции активации типа ReLU. Для сигмоидной функции...

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

5
698 / 574 / 75
Регистрация: 20.09.2014
Сообщений: 3,727
13.12.2020, 17:51
У вас должно быть три массива весов, так как слоя три: W01, W12, W23. Все три массива разных размеров. Может такой подсказки достаточно будет?
0
0 / 0 / 2
Регистрация: 30.09.2015
Сообщений: 29
13.12.2020, 21:05  [ТС]
Mikhaylo, а не подскажите насчет вот этого ? Взял наработки с англоязычного stackoverflow. Сверху рисуешь по 3 экземпляра для цифр от 1 до 3 и снизу рисуешь цифру. После нажатия на кнопку "тренировать" в консоль выводятся 3 значения для каждой из цифр. Я такое делал на brain.js. Только в итоге выходит бред.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
14.12.2020, 09:46
Цитата Сообщение от Ivan76russ Посмотреть сообщение
6 скрытых слоев
серьезно?
0
0 / 0 / 2
Регистрация: 30.09.2015
Сообщений: 29
14.12.2020, 09:55  [ТС]
Точнее 1 скрытый слой, ошибся. А в нем уже 6 нейронов.
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
17.12.2020, 08:33
Цитата Сообщение от Ivan76russ Посмотреть сообщение
еще насчет весов
Иногда ещё и смещения прибавляют
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2020, 08:33
Помогаю со студенческими работами здесь

Метод обратного распространения ошибки
Здравствуйте! Вопрос пишу перцептрон, чтобы лучше понять как он работает пишу не используя всякие там готовые решения и прочее. Застрял...

Обучение нейронной сети методом обратного распространения ошибки
При обучении созданной на C# нейронной сети возникли сложности. Используется сигмоидная функция активации и архитектура нейронной сети с...

Определение адаптивного шага обучения алгоритм обратного распространения ошибки
Доброго времени суток. В ходе изучения теории по алгоритму обратного распространения ошибки возник такой вопрос. При определении...

Нейронная сеть
Имеется скрипт нейросети на python. Единственное но: не понимаю, как её правильно обучать. Читал про метод обратного распространения...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru