Для успешного функционирования нейронной сети очень важно выполнять правильное обучение нейросети. Мы рассмотрим алгоритм обратного распространения ошибки, который позволяет успешно настраивать веса (коэффициенты) нейросетей со скрытыми слоями. Не стесняйтесь задавать вопросы в комментариях, высказывать свое мнение, а также обязательно поставьте лайк под видео. Этим вы легко можете помочь развитию образовательного канала. И приятного просмотра! Исходный код проекта доступен на github: github.com/shwanoff/neuralnetworks А для общения заходите в наши чаты: Общий чат в телеграм: ttttt.me/codeblog_chat Чат по C# в телеграм: ttttt.me/codeblog_csharp Чат в дискорд: discord.gg/EV2WdyP
Ты реально красава ! давно искал подобный материал, спасибо большое ! Если можно сделай еще видос как распознавать с вебки Васю Петю и т д(нейронка на с# с 0). Будет очень интересно.
Уважаемый Шванов Вадим , подскажите пожалуйста, как сделать НС, неподверженную локальным минимумам, а неуклонно идущей к глобальному минимуму ошибки, при обучении. Ну кроме смещения старта обучения или дропаута?
Привет всем ! у меня появился вопрос при создание объекта класса topology нужно передавать 4 аргумента. количество нейронов на вход и на выход , Layers , и lerning Rate в видио на 1:25:09 не передаётся параметр lerningRat. Какое значение lerningRate нужно передавать в topology если мы его в коде негде не вычисляем ? как подобрать параметр ?
28:53 Подскажи, пожалуйста, откуда берется delta для шага 4)? Это предыдущая delta из шага 2)? Если так, то какой смысл этот error снова брать для рассчета новой delta?
Здесь ошибка, в классе Neuron, в методе SigmoidDx: var result = sigmoid * (1 - sigmoid); Нужно умножать а не делить, чтобы производную получить (см. Вики разд. "Нейронные сети") ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4%D0%B0#%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8 Закрепите, чтобы последователи знали
Я не уверен, но, кажется, нашёл у тебя ошибку в обучении сети, а именно в методе BackPropagation, если учитывать, что метод задумывался как универсальный для сети с любым количеством слоёв и нейронов в слоях. Суть в следующем: если в сети 2 или более выходных нейронов или больше одного скрытого слоя с 2-мя или более нейронами, то обучая конкретный нейрон (во втором вложенном цикле метода BackPropagation) мы, кроме прочего, определяем его дельту, которую будем использовать для обучения нейронов следующих слоёв (под обучением я имею ввиду процесс изменения входящих весов). В текущем исполнении, дельта данного нейрона зависит исключительно от последнего нейрона предыдущего обученного слоя. Насколько я понимаю, должно быть всё-таки несколько циклов: 1) обратный проход с вычислением ошибки каждого нейрона и вычислением его дельты, без коррекции весов 2) прямой проход уже с коррекцией весов P.s. Спасибо за ответ на вопрос к предыдущему видео!
@@vadiminf да, как раз при нескольких слоях выдаёт адекватный ответ. + тут, скорее всего из-за спешки автора, неправильно записана производная сигмоиды. Я же её отсюда бездумно переписал и ох и намучался искать ошибку. А про рабочий код - пиши почту, сброшу
43:03 где ошибка? тут говорится что производная сигмоида = sigm * (1 - sigm) math.wikia.org/ru/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4 а у вас деление
Это что-то очень странное. что именно ты имеешь ввиду под приспособить в Excel? прочитать данные из Excel файла? это возможно, а вот встроить нейронку напрямую в Excel будет очень проблематично
@@CODEBLOG Подразумеваю вызов из Excel нейросети, передачи ей файла для обработки, и возврат ответа для анализа , графиков, итд. Внешняя обработка нейросетью.
@@prinshamlet5942 Никогда с этим не работал, но мне кажется должно быть что-то вроде возможности написания плагина на VB, который уже будет обращаться к приложению с нейронкой и обновлять данные
При генерации нейросети нейроны скрытого слоя получают случайные, но ОДИНАКОВЫЕ веса. Как вообще эта нейросеть работает? При таком косяке нейроны скрытого слоя всегда получают одинаковые сигналы и на выходе должны давать одинаковые значения.
Я задержку по времени поставил тут: private void InitWeigtsRandomValue(int inputCount) { var rnd = new Random(); Thread.Sleep(100); // ТУТ!!! for (int i=0; i < inputCount; i++)
Для успешного функционирования нейронной сети очень важно выполнять правильное обучение нейросети. Мы рассмотрим алгоритм обратного распространения ошибки, который позволяет успешно настраивать веса (коэффициенты) нейросетей со скрытыми слоями.
Не стесняйтесь задавать вопросы в комментариях, высказывать свое мнение, а также обязательно поставьте лайк под видео. Этим вы легко можете помочь развитию образовательного канала. И приятного просмотра!
Исходный код проекта доступен на github: github.com/shwanoff/neuralnetworks
А для общения заходите в наши чаты:
Общий чат в телеграм: ttttt.me/codeblog_chat
Чат по C# в телеграм: ttttt.me/codeblog_csharp
Чат в дискорд: discord.gg/EV2WdyP
Наконец понял как все это работает и что от чего зависит. Спасибо за простое объяснение вещей!
Рад помочь )
Спасибо вам за то, что несете свет в массы!
Всегда пожалуйста, очень рад, что нравится )
Ты реально красава ! давно искал подобный материал, спасибо большое ! Если можно сделай еще видос как распознавать с вебки Васю Петю и т д(нейронка на с# с 0). Будет очень интересно.
Очень рад, что наткнулся на на тебя) Классно все объясняешь, приятно смотреть хорошим кодом:)
всегда пожалуйста )
Благодарю за урок, было очень интересно!
Нас мало, но мы реальные парни!)))
Да, те кто не бросают дело - крутые ) это очень частая проблема. желание учиться есть, а вот что-то делать - не многие способны
Лайк не глядя)
Бро ты крут мы поддерживаем тебя и ждем новые ролика, ребята давайте вместе
Спасибо )
@@CODEBLOG Сделай пожалуйста видос на фраемфорке каком нибудь не сложный нейронки
Удивительно то, что когда я оставил только два слоя (вход выход), получил наилучшую точность )
Уважаемый Шванов Вадим , подскажите пожалуйста, как сделать НС, неподверженную локальным минимумам, а неуклонно идущей к глобальному минимуму ошибки, при обучении. Ну кроме смещения старта обучения или дропаута?
Привет всем ! у меня появился вопрос при создание объекта класса topology нужно передавать 4 аргумента. количество нейронов на вход и на выход , Layers , и lerning Rate в видио на 1:25:09 не передаётся параметр lerningRat. Какое значение lerningRate нужно передавать в topology если мы его в коде негде не вычисляем ? как подобрать параметр ?
Внимательно смотри
Большое спасибо за видео!
Всегда пожалуйста )
Вадим привет,у меня вопрос(не по теме) у меня тоже винда 10,на каком приложении ты рисуешь?ну когда вы объесняете в теории
Я может чего-то в течение занятий не уловил, но как у вас получается запускать код без метода Main? У меня ни отладка, ни тесты не работают :(
28:53 Подскажи, пожалуйста, откуда берется delta для шага 4)? Это предыдущая delta из шага 2)? Если так, то какой смысл этот error снова брать для рассчета новой delta?
нашел ответ на 1:09:38
у вас в функции Sigmoiddx ощибка. я из github скачал проект там тоже такое ощибка.
public double SigmoidDx(double x)
{
return x(1-x);
}
Да, нужно пофиксить
@@CODEBLOG что самое странное, с правильной производной, нейронка не работает
@@NekoGirlGod Данный момент в дальнейших видео поправили?
@@vadiminf нет больше видео
всмысле? там return (Sigmoid(x) / (1 - Sigmoid(x)));, а должно быть return (Sigmoid(x) * (1 - Sigmoid(x))) ?
спасибо!!!
Интересно сделать сеть для звуков, частот и тембров голоса) Хочу чтобы Левитан прочёл мои стихи!))
Мне кажется что-то подобное уже есть... погугли
@@CODEBLOG Ну Иосифа Джугашвилли в будильник, точно никто не додумался при- Xamarin-нить ))
ЗА АЛЬЯНС!!!
Здесь ошибка, в классе Neuron, в методе SigmoidDx:
var result = sigmoid * (1 - sigmoid);
Нужно умножать а не делить, чтобы производную получить (см. Вики разд. "Нейронные сети")
ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4%D0%B0#%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8
Закрепите, чтобы последователи знали
Почему не добавили нейрон смещения bias? Лучше будет тренироваться сеть
И до этого тоже должны будем дойти )
Я не уверен, но, кажется, нашёл у тебя ошибку в обучении сети, а именно в методе BackPropagation, если учитывать, что метод задумывался как универсальный для сети с любым количеством слоёв и нейронов в слоях. Суть в следующем: если в сети 2 или более выходных нейронов или больше одного скрытого слоя с 2-мя или более нейронами, то обучая конкретный нейрон (во втором вложенном цикле метода BackPropagation) мы, кроме прочего, определяем его дельту, которую будем использовать для обучения нейронов следующих слоёв (под обучением я имею ввиду процесс изменения входящих весов). В текущем исполнении, дельта данного нейрона зависит исключительно от последнего нейрона предыдущего обученного слоя.
Насколько я понимаю, должно быть всё-таки несколько циклов:
1) обратный проход с вычислением ошибки каждого нейрона и вычислением его дельты, без коррекции весов
2) прямой проход уже с коррекцией весов
P.s. Спасибо за ответ на вопрос к предыдущему видео!
Если это реализовал у себя в коде и при нескольких слоях выдаёт адекватный ответ, то можешь скинуть этот момент?)
@@vadiminf да, как раз при нескольких слоях выдаёт адекватный ответ. + тут, скорее всего из-за спешки автора, неправильно записана производная сигмоиды. Я же её отсюда бездумно переписал и ох и намучался искать ошибку.
А про рабочий код - пиши почту, сброшу
@@TheFroller smirnovvadim37@yandex.ru
@@TheFroller скинешь на почту?
@@TheFroller если не сложно, то можешь плез скинуть код, буду дико благодарен
Почта: bog22232@ya.ru
Все круто, именно основы, но в циклах очень легко допустить ошибку. Нужно подумать как это проще реализовать.
43:03 где ошибка? тут говорится что производная сигмоида = sigm * (1 - sigm) math.wikia.org/ru/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4 а у вас деление
да там ошибка
Можно трек с 34:00
А можно как пример приспособить к Excel эту сеть?) плиз)
Это что-то очень странное. что именно ты имеешь ввиду под приспособить в Excel? прочитать данные из Excel файла? это возможно, а вот встроить нейронку напрямую в Excel будет очень проблематично
@@CODEBLOG Подразумеваю вызов из Excel нейросети, передачи ей файла для обработки, и возврат ответа для анализа , графиков, итд. Внешняя обработка нейросетью.
@@prinshamlet5942 Никогда с этим не работал, но мне кажется должно быть что-то вроде возможности написания плагина на VB, который уже будет обращаться к приложению с нейронкой и обновлять данные
При генерации нейросети нейроны скрытого слоя получают случайные, но ОДИНАКОВЫЕ веса.
Как вообще эта нейросеть работает?
При таком косяке нейроны скрытого слоя всегда получают одинаковые сигналы и на выходе должны давать одинаковые значения.
У меня такая ситуация при запуске тестов к данной программе и получилась, не подскажешь, как можно поправить?
Точнее веса разные, но вот значения в слоях получаются одинаковые
Я задержку по времени поставил тут:
private void InitWeigtsRandomValue(int inputCount)
{
var rnd = new Random();
Thread.Sleep(100); // ТУТ!!!
for (int i=0; i < inputCount; i++)
@@nikolayantonov7871 и все норм заработало? Значения нейронов разные выходят?
@@vadiminf
Да. Так разные начальные значения нейронов получаются.
В SigmoidDx ошибка. Неправильно взята производная. Именно поэтому она так долго думает. Там должно быть x×(1.0-x), а сейчас там x/(1.0-x)
блин смотрю все ролики в x2 уже начал думать в x2
нейроные сети и скусственныйинтеллект скорее разные вещи. это похоже на аналитику, статистикау и большие данные
29:13 ох дядька, 4-й пункт вобще не понятно что имеется в виду
Привет Всем
лучше бы комментарии писал, чем на чат отвлекался, все лишнее время как раз на это и уходит.