Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 44

Я не сдамся! Проблема в обучении нейросети для ИЛИ

05.09.2023, 21:06. Показов 702. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что ж, нейросети это сложно и это стоит признать, но что-то настолько простое, что максимум на что способно это выполнять роль логической функции ИЛИ (ну или И если захочется) я теперь просто обязан(когда переписываешь программу в 10 раз это уже дело принципа). Я взял самую простую и постарался сделать всё максимально просто, чтобы не было сомнений, что проблема не в том, что я не умею умножать матрицы или криво цикл написал, а в том, что я мало что о обучении знаю.
Вот, что мы имеем:
Python
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
import math
import random
 
step = 0.01
epoches = 10000
 
 
n1 = 0
n2 = 0
 
input1_n1 = random.uniform(-0.5,0.5)
input2_n1 = random.uniform(-0.5,0.5)
input3_n1 = random.uniform(-0.5,0.5)
 
input1_n2 = random.uniform(-0.5,0.5)
input2_n2 = random.uniform(-0.5,0.5)
input3_n2 = random.uniform(-0.5,0.5)
 
n1_out = random.uniform(-0.5,0.5)
n2_out = random.uniform(-0.5,0.5)
 
def act(x):
    return 1 / (1 + math.e**-x)
 
def dx(x):
    return x * (1 - x)
 
 
def proceed(input1,input2):
    global n1
    global n2
 
    n1 = 0
    n2 = 0
 
    n1 = act(input1*input1_n1 + input2*input2_n1 + 1*input3_n1)
    n2 = act(input1*input1_n2 + input2*input2_n2 + 1*input3_n2)
 
    out = act(n1*n1_out + n2*n2_out)
    return out
 
def learning():
    global input1_n1
    global input2_n1
    global input3_n1
    global input1_n2
    global input2_n2
    global input3_n2
    global n1_out
    global n2_out
 
    for i in range(epoches):
        a = random.randint(0,1)
        b = random.randint(0,1)
        c = int(bool(a) or bool(b))
 
        out = proceed(a,b)
        err_out = (c - out)**2
 
        err_n1 = err_out * n1_out
        err_n2 = err_out * n2_out
 
        n1_out -= step * err_out * dx(out) * n1
        n2_out -= step * err_out * dx(out) * n2
 
        input1_n1 -= step * err_n1 * dx(n1) * a
        input2_n1 -= step * err_n1 * dx(n1) * b
        input3_n1 -= step * err_n1 * dx(n1) * 1
 
        input1_n2 -= step * err_n2 * dx(n2) * a
        input2_n2 -= step * err_n2 * dx(n2) * b
        input3_n2 -= step * err_n2 * dx(n2) * 1
 
        if(i%100==0):
            print("Ошибка: ",abs(out - c))
learning()
В чём проблема? Почему не обучается? Вышло довольно много текста, но тут большая часть это копипаста да и названия интуитивно должны быть понятны, так-что разобраться в том, что я натворил будет наверное не сложно. Можете помочь исправить ситуацию? Надеюсь, что увидев правильный вариант я смогу понять как всё должно быть устроено, возможно...

P.s Я пишу тут только потому что сам не смог вообще никак разобраться. Вариантов перебора функции активации и ошибки, а также формулы для изменения веса скорее всего больше сотни, так-что ручками потыкать и сделать так чтоб всё заработало не получится.

P.s.s Я тут прикреплю схему нейросети для удобства и лучшего понимания.
Миниатюры
Я не сдамся! Проблема в обучении нейросети для ИЛИ  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2023, 21:06
Ответы с готовыми решениями:

Локальный минимум при обучении нейросети
Как понять, что при обучении функция ошибки попала в локальный минимум? Ошибка начинает увеличиваться или очень медленно уменьшаться?

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

Могут ли обнулится веса парецептрона при обучении нейросети
Я слышал где то ,что нейро сеть при обучений сама отключает ненужные парецептроны (обнуляет вес), что то не верится. Парецептрону можно...

4
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,375
05.09.2023, 21:48
Лучший ответ Сообщение было отмечено alex150051 как решение

Решение

Цитата Сообщение от alex150051 Посмотреть сообщение
err_n1 = err_out * n1_out
err_n2 = err_out * n2_out
Неверно.
1
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 44
06.09.2023, 16:09  [ТС]
Кажется понял, мы уменьшаем квадратичную ошибку, но распространять по сети нужно её производную?
Заменил на
Python
1
2
3
err_out = (out-c)
err_n1 = (out - c) * n1_out
err_n2 = (out - c) * n2_out
И всё заработало. Спасибо!(хотя не ожидал, что смогу только зная что ошибка в 2 строчках понять как улучшить ситуацию).
0
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,375
06.09.2023, 18:16
Цитата Сообщение от alex150051 Посмотреть сообщение
err_n1 = (out - c) * n1_out
err_n2 = (out - c) * n2_out
И всё заработало.
Всё равно неправильно.
0
0 / 0 / 0
Регистрация: 27.07.2022
Сообщений: 44
07.09.2023, 15:25  [ТС]
Что ж, когда я попытался сделать сеть для XOR я это понял, пойду тогда книжки читать видимо .-.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2023, 15:25
Помогаю со студенческими работами здесь

Производная матрицы Грама. Проблема в производной, или все таки нейросети?
Для переноса стиля с помощю нейросетей используется матрица грамма(для переноса стиля), которая вычисляется как G = A * AT(где AT -...

Исходники на VC++ для алгоритма CART или нейросети
очень трудно все это изучать, везде объяснения как работают уже готовые алгоритмы и сети, а как их писать неясно если пишут про нейросети...

Проблема в обучении нейронной сети!
Здравствуйте! Написал простую нейронную сеть (прямого распространения). При обучении (обратное распространение ошибки)...

Проблема в обучении агента MLAgents
У меня есть сцена с трассой и машиной, и я хочу чтобы машина научилась сама проходить трассу. Всё работает правильно, только машина странно...

Что перспективнее в обучении - Java или Node.js?
Сейчас учусь на третьем курсе и все никак не могу выбрать язык, выбор стоит между java и node.js, хочу именно backend разработку, что...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
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