только начинаю смотреть, особенно рад слышать что видео будет на языке "С", так как мне необходимо создать нейросеть на "С++" так что схожести языков будут наруку
Никита, Благодарю за информацию. Я озадачился идеей создания своей собственной нейросети и вышел на твоё видео. В силу моего возраста и недостаточности нужных навыков, это первое видео с подробным гайдом и ссылкой. Пожалуйста продолжай своё направление, я буду следить за твоими публикациями.Это очень интересная тема, которая открывает перед человеком безграничные возможности роста и увеличение благосостояния.
Чел, ну ты нереально хорош, я очень жалею, что в твоем возрасте ... пинал. Сейчас учусь в вузе, и мой самый главный враг это время, которого недостаточно на то, чтобы успевать узнавать и учить все, просто потому что не занимался этим раньше. Выпускай ролики по чаще, желательно еще бы что то про нейросети от тебя послушал. Как написали ниже, тема очень глубокая, так что контента можно много пилить, особенно учитывая тот факт, что нейронки сейчас используются повсеместно, а хорошего материала на русском ютубе просто нету
Согласен на русском ютубе вообще мало такого контента. Здесь я постарался объяснить нейронки так как понял их сам + максимально просто чтобы было понятно всем. Видео с объяснениями на канале будут дальше, но не думаю что про нейросети. Больше про алгоритмы, и языки программирования
Чел, ну походу ты бездарь или лодырь или и то и то, если не можешь вкатиться в эту шляпу. Нужен максимум год, чтобы +- отдуплять что-то. Знаком лично с людьми, которые и в 25 и в 30 успешно становились разработчиками. Ты сам создал себе какие-то рамки в виде возраста и времени, которые тебе мешают развиваться.
Спасибо, добрый юноша! Вы так хорошо все объяснили, что даже мне, гуманитарию, понятно. У вас кроме математических способностей еще и педагогический талант. Не растеряйте только всё это! Единственное замечание - темп речи, как в рекламном ролике. Объяснять все же лучше чуть медленнее.
Ну что могу сказать? Браво! Особенно порадовало желание разобраться в велосипеде) Какой деликатный камень в огород Пайтона в комментарии. Есть правда один нюанс, который портит всю картину. Обучение обратным распространением подразумевает взятие производной от функции активации, не увидел в коде.
Рад, что смог вам помочь. Да, действительно большинство объяснений которые я пересмотрел были не совсем понятные, мне пришлось пересматривать некоторые моменты по несколько раз, а потом суммировать полученную информацию. А также экспериментировать прежде чем получить эту программу
друг, твоё видео реально классное и ты большой молодец по тому что стараешься досконально понять тему (написать код на Си), но так же важно разбираться и в математике того о чём ты говоришь. На самом деле очень нехватило понятного математического доказательства, а так всё круто спасибо за видео
Решил что то менять в жизни, спасибо большое за подробное видео пока у меня не хватает навыков что бы понять все, буду смотреть все твои видео может получится реально стать программистом, лайк подписка. Спасибо
10-я строчка кода: return (a 0; 20-я строка кода, вернее вся функция train. int* привести к double * - это, конечно, сильно (я уж молчу про небезопасно), не проще ли тогда изначально объявить массив data как double? Ну это же удобнее. Т.е. просто объявляем нашу функцию void train(double data[4][3], int exp[4), и в main'e объявляем double trainingdata[4][3], и все, и не нужно есть кактус. 33-я строчка: int expresults[4] = {0, 0, 1}; - это тоже сильно. к тому же, вроде как у нас была таблица 1,0,1 = 1 0,0,1 = 0 1,1,1 = 1 1,0,0 = 1 0,1,0 = 0 а в итоге мы почему-то используем таблицу 0,0,1 = 0 0,1,1 = 0 1,0,1 = 1 0,1,0 = ? (0 по дефолту, но это не точно) да, у нас массив из 4 элементов инициируется только 3-мя значениями, так что на месте последнего элемента у нас по чистой случайности правильный 0, просто повезло, так что берем и смело переписываем: double trainingdata[4][3] = { {1,0,1}, {0,0,1}, {1,1,1}, {1,0,0} }; int i, expresults[4] = {1,0,1,1}; /* .... */ double newdata[] = {1,1,0}; И, кстати, да, а для чего у нас тут windows.h? Мы ничего из него не используем, но зачем-то инклудим. Зачем? З.Ы. fmod( rand()%100000000 * 0.1, 1.05 ) ... ну-у-у-у.... ээ-это-о-о-о... а не проще ли w[i] = rand() % 11 / 10.0; Не? Никак? Низя? Работать не будет? Точно? Да и в целом, у нас на входе 3 животинки, а на выходе только 2 (либо 0, либо 1). Эх, жизнь не справедлива. Кто-то определенно не дополз до финиша. Либо задача составлена некорректно. В общем, еще есть куда расти. Успехов. :)
Все же нейросети гораздо сложнее, чем объяснение за 15 минут) Мне на своем курсе удавалось рассказать за 5-7 пар, причем это 2-3 курсу в вузе)). Там на самом деле куча математики и формул. Так что, если реально хотите понимать как устроены и почему работают нейронки, вам придется учить все с нуля. Иначе это просто нереально (по себе знаю). А так, попытка неплохая) Причем больше удивился тому, что пишешь на C. Все таки нечасто увидишь столь молодых людей на C/++. Это к моменту о том, что люди знакомясь с программированием считают знание нескольких строк кода на питоне - "программированием". В общем удачи в продвижении))
Вау! Я удивлён что меня смотрят преподаватели. Спасибо большое вам за комментарий, они очень сильно мотивируют снимать подобный контент дальше. Я конечно знал что там куча формул и все такое, но целью видео было ввести в курс дела, и я когда его делал сам недавно познакомился с этой темой. Это обширная и интересная тема, но пока я изучаю углубленно лишь язык С. Он занимает отдельное место в моем сердечке :з Синтаксис языка просто идеален, и тут даже придраться не к чему в отличии от того же Паскаля или Алгола. Мне кажется что человек в любом возрасте может использовать инструмент, если знает как. Вы верно подметили про подростков, считающих что несколько строк на питоне это "программирование". Действительно жаль что молодое поколение во всем выбирает лёгкий путь. И да я вообще не люблю питон, у меня аллергия на интерпретаторы, высокий уровень, и динамическую типизацию. Ещё раз спасибо за коммент, так ролики чаще попадают в реки))
Раз уж вы тут про языки, тогда может сможете пояснить пню, почему почти во всех материалах на тему машинного обучения речь идёт именно о питоне? Я так понимаю из коробки всякие си работают шустрее из-за строгой типизации и компиляции(хотя помнится мне, что с какими-то библиотеками и интерпретаторами разница не очень заметна, не уверен). В чем вообще преимущества си перед питоном, и наоборот, в контексте данных задач?
@@rxrx0255 вообще на С можно написать всё что угодно - от ОС до нейросетей. Но я сталкивался с проблемой такой же как вы, что в большинстве материалов по машинному обучению приводят в пример код на питоне. Я кажется могу объяснять - всё дело в простоте. Вы можете писать нейросети на чем угодно - даже на чистом ассемблере, но вы хотите сосредоточится на самом алгоритме и его реализации, а не на том как работает процессор, и какие регистры можно использовать на запись. Питон - полностью абстрагирует программиста от работы с аппаратной частью - вы излагайте что надо делать машине простым английским языком. Это и есть разница между высокоуровневым и низкоуровневым программированием. А что касается преимуществ С/С++ в данной сфере (ИИ) то они быстрые по своей природе, и ваша нейросеть будет работать быстрее чем на питоне. Правда стоит вопрос - а сможете ли вы её написать на чистом С? Ну там указатели, адреса, malloc, и так далее что отвлекает от алгоритма. Я сам с этим сталкивался, но не в коем случае не хочу переходить на питон, каких бы трудностей мне это не стоило, т.к. я не фанат высокого уровня, и скорость выполнения для меня важнее чем скорость написания кода и отладки ошибок - это ли не есть программирование? Итого могу сказать что питон прост для восприятия, и помогает концентрироваться на математике, поэтому и приводятся примеры именно на нем. Если бы я писал книгу по нейросетям я бы мог написать что то такое на С: uint32_t *weights = (int*)calloc(3U, sizeof(uint32_t)); … free((void*)weights); Но не думаю, что все бы это поняли, ведь тут в отличии от питона надо хоть чуть чуть понимать из чего состоит С. И да Python можно в значительной мере ускорить с помощью JIT компилятора NumPy. Но он никогда не обойдёт по скорости вычислений чистый С, это невозможно физически. Я вот недавно учавствовал в олимпиаде ВСОШ по программированию, и вот там С меня подвёл тем что писать долго - продумывать надо. Но вы не волнуйтесь - все питонисты провалили тест на время выполнения XD
Реально, вообще кайф!! Есть тг канал? Заведи пожалуйста. Я часов 10 потратил на исследование темы нейросетей (математика на высоком уровне, в программировании 3 года опыта) и нифига не понял. А тут абсолютно понятно. Очень хочу тг канал
Спасибо! Очень полезное и доходчивое объяснение. Возможно, ещё следует, уделить некоторое внимание сохранению и восстановлению данных натренированной сети. Как правило это не обсуждается. Видимо, считается, что это и так понятно, хотя ...
Да, правильно. Но это легко сделать. Самый простой способ - записать массив весов в двоичном виде в файл. А при запуске сети не тренировать её заново, а просто загрузить веса из файла
Вход это сигнал от входного нейрона к весу (типо если сигнал от него слабый, то вес не сильно влияет на общую картину и корректировать его смысла меньше, чем вес, у которого сигнал от входного нейрона сильнее)
Очень интересно, но трудно понимаемая тема, особенно когда первый раз смотришь, приходится пересматривать отдельные моменты, обидно когда я не понимаю твои объяснения, думаю придётся посидеть и обдумать. С практической частью вообще не понятно, но это и ясно, я ведь не изучал ещё язык. Вообщем итог, чтобы понять твой материал или вообще материал про нейро сеть нужно несколько раз просмотреть видео, а лучше всего записать, очень приятно, что урок даёт мой сверстник, но это вызывает сомнение в его компетенции, но пока сомнений нет, спасибо за объяснение принципа работы нейронойсети типа перцептор, пойду учить язык Си. Надеюсь ролики про нейроную сеть ещё будут.
Спасибо за подробный комментарий. Мне самому было не легко разобраться в столь интересной, но запутанной теме. Да я действительно старался объяснить всё понятным языком, но думаю что людям не знакомым с программированием как правило не слишком легко даётся подобный материал. Я сам новичок в данном деле (машинное обучение и нейросети), но всё же как понял решил объяснить другим людям, ведь кто знает, сколько людей посмотрят это видео, и оно наставит их на правильный путь, или как минимум вызовет мотивацию для дальнейшего обучения. Естественно к этой теме я ещё вернусь, но думаю точно не сейчас. Я готовлю новый ролик. Он будет по языку С, но не связан с написанием ИИ. Но потом планирую написать более сложную нейросеть, которая соответственно справляется с более сложными задачами.
Молодец, продолжай дальше про нейросети, классно и понятно обьясняешь. Но еще много чего можно рассказать, ai изображения, ai видео, ai голос, ai сложные задачи, программирование с помошью нейросети и т.п.
Привет, не так давно наткнулся на твой канал, желаю успехов тебе! Хотелось бы видеть побольше видео связанных с ИИ, довольно популярная тема. Сам недавно увлекся этим, сейчас пытаюсь выбрать язык для написания ИИ, выбор пал между с/с++ и питоном. Говорят питон лучше подходит, но лично мне больше по душе с/с++, особенно в плане синтаксиса
Привет, спасибо за комментарий! Конечно в плане синтаксиса с/с++ мне тоже больше нравятся. Но питонисты говорят что у них есть много библиотек и модулей, которые специализируются на создании различного рода нейронок. А на с/с++ это придётся писать с нуля, что мне кажется гораздо интереснее + даст углубленное понимание того как это работает, нежели просто поочередный запуск функций из библиотек
Нейросеть должна выдавать 1 или 0 в зависимости от того, что стоит в 0 индексе массива, так ? Просто получается что код неправильный, так как выдает 1 даже если в 0 индексе стоит 0, но в 1 и 2 стоят единицы.
13:49 В main в первой строке инициализации идет 4 определения входных параметров trainingdata, но тут же для них определяется массив всего из трех ожидающихся значений expresults. Тут же несоотвествие. Функция train вернет ошибку index out bounds, вероятно
Вы правильно заметили. Я уже писал в описании, что последний элемент expresults должен был быть проинициализирован нулём, а не опущен как на видео. И это действительно ошибка, ведь в соответствии со стандартом языка C ( ANSI ) - автоматические и регистровые переменные НЕ будут инициализироваться нулём при их определении. А массив expresults здесь как раз автоматическая переменная. Также, если вы знакомы с языком С, то знайте что в С нет никаких проверок на границы массива. Мы спокойно можем записать данные по любому адресу, и исключений на уровне программы не будет. Другое дело - ОС завершит наш процесс и кинет нам SIGSEGV в ответ на наши действия.
Всё хорошо, но в цикле for у функции RightProp, вместо граничного числа 3, лучше поставить вот ту константу _weights. В main тоже надо бы избавиться от 3
А во входе может быть также число от 0 до 1? Попробовал набор данных int[][] trainInput = new int[][] { new int[] { 5, 0, 1 }, new int[] { 5, 1, 1 }, new int[] { 0, 0, 1 }, new int[] { 5, 1, 0 }, }; int[] trainOutput = new int[] {0, 0, 1, 0}; при попытке получить ответ от { 5, 0, 1 } получаю 1, при попытке получить ответ от { 0, 0, 1 } получаю 1, при попытке получить ответ от { 5, 1, 1 } получаю 1,
В программе есть существенная ошибка: при приведении указателя к double. От этого значение памяти по указателю не приводится к даблу, оно остаётся таким же как было, а у дабла совершенно другой формат! И соответственно на вход функции RightProt поступают совершенно некорректные значения. Приводить к даблу надо значения, а не указатель.
эмм. передача int массива в right_props через double* каст, приведёт к тому, что массив inputs будет хранить неправильно интерпретируемые данные. код не рабочий получается
6:31 - всё немного не так. Допустим у нас есть лыжник, он упал на гору, ему нужно спуститься в самый низ. горы имеют локальный и глобальный минимум. В его распоряжении есть джетпак, который ускоряет его движение на константу LR, что позволяет проезжать локальные минимумы и даёт шанс попасть в САМУЮ низкую точку. Но мы не знаем, где будет такая точка и какое ускорение нам потребуется для её достижения, поэтому скорость обучения надо подбирать.
Массив expresults[4] длинной 4 инициализирован массивом из 3 значений. Теперь думаем какую ошибку он получил в функции train(). Картинка на 2:10 содержит одну матрицу, training data[4][3] содержит другие значения. Ты сколько записывал это видео?
Этот парень понимает в искусственном интеллекте больше чем Гурулёв! ;-) Молодец! Так держать! Мне всегда вспоминается Ералаш, начинающийся словами "Дети наша опора! Им жить и работать в двадцать первом веке!" ruclips.net/video/fwpsL3E_U9g/видео.htmlsi=CC0b9sJlkgjvJuC2&t=15
Искал в интернете контент по нейросетям. Смотрел разные видео на ютубе от разных авторов пока не уловил суть. Читал статьи. Потом решил сделать такое видео, которое совмещает в себе теорию и практику так, чтобы был понятен сам принцип, на который можно опираться при дальнейшем обучении
Давать информацию с такой скоростью, все равно что пытаться прочесть сказку о царе Салтане за 10 -20 минут-через пять минут перестанешь воспринимать информацию
Это конечно классно что всем всё в видео понятно, но я уже зная как работает нейросеть и написав несколько своих, не могу понять что в этом ролике объясняется
Код немного странный. Например, weights лучше объявлять не как define, а как const int. И непонятно, зачем ты её объявил, если потом вместо неё при проверках использовал её значение (3). Очевидно, объявлять значение весов как переменную стоит только в случае, если изменение данной переменной изменит количество весов.
С первой секунды подумал, что сейчас будет что то из рубрики- сегодня мы поговорим о бравл старс)) но блин, мое почтение, крутой) мы в твоем возрасте палкой крапиву пизд.и)) давай юный Бил Гейтс, покажи им всем)
Кто сказал, что забросил, нет конечно) Скоро продолжу делать видосы, просто недостаток времени и технические трудности внесли свой вклад в частоту выхода роликов
@@IT_Shkolnikпросто я это к тому, что твой контент вызывает уважение, сам с недавних пор решил вкатиться в изучении ИИ, и нашёл твой ролик весьма интересным.
Какие ещё типы нейронок существуют? И чем они отличаются? Например, если мы получаем описания животного и надо поделить на группы, пример: вид, цвет, имеет ли хвост, клюв и тд.
как я завидую молодым ребятам сейчас... когда я учился у нас небыло столько класных и интересных штук, и интернет был по карточкам ))) парни, учитесь, пока у вас нет обязательств выбирайте то что по душе, пробуйте постоянно что-то новое, ну а потом конечне ни в коем случае не работайте за копейки! ) Кто работает за копейки тот предатель сообщества!
Для понимания темы необходимо иметь базовые знания в программировании. Стоит отметить что в этом видео гораздо более приземистo и понятно объясненa суть. Насколько это возможно конечно. Спасибо за старание, очень полезнo и познавательнo! И ни в коем случае не переставай записывать ролики В подобном формате.
Спросил у Got чата, ставить лайк или нет этому видосу .. Чат сказал дизлайк поставить.. Думаю нейросеть не любит конкурентов!😂😅😂.. я принял соломоново решение -просто написать коммент под видео😮😅😂
Напиши свой сайт и создай сообщества во всех социальных сетях! Дальше ты уже сам поймёшь что тебе делать и это естественно тебе надо будет автоматизировать! Удачи Мужик!!
Хорош. Не забрасывай развивать свой мозг. Со временем если перестанешь этого делать - начнется деградация и вернуться к тому что было будет тяжело, особенно мышление. Мозгу свойственно забывать то что не используешь. Кажется мозг стирает то что не используешь ровно так же как и обучается)
------------------- ССЫЛКА НА РЕПОЗИТОРИЙ GITHUB ---------------------------
github.com/Nikita-bunikido/Perceptron
"Я обязательно поступлю на бюджет!"
- твои конкуренты:
Как приятно слышать грамотные и понятные объяснения, а видеть код на "C" особенно приятно.
Спасибо!
Спасибо большое. Да, мой любимый ЯП
только начинаю смотреть, особенно рад слышать что видео будет на языке "С", так как мне необходимо создать нейросеть на "С++" так что схожести языков будут наруку
Такой молодой и шарящий, приятно видеть, продолжай в том же духе парень, у тебя большое будущее!
Спасибо большое за поддержку!
Парень, это одно из самых лучших пояснений работы нейронки. Респетище!
Только видео включил, сразу лайк. Видно, что реально школьник и уже пытается как то продвигаться, красава!
Спасибо :)
Ты большой молодец! Я видел кучу подобных видео, но твое самое доходчивое!
Рад что смог понятно объяснить, спасибо вам!
Никита, Благодарю за информацию. Я озадачился идеей создания своей собственной нейросети и вышел на твоё видео. В силу моего возраста и недостаточности нужных навыков, это первое видео с подробным гайдом и ссылкой. Пожалуйста продолжай своё направление, я буду следить за твоими публикациями.Это очень интересная тема, которая открывает перед человеком безграничные возможности роста и увеличение благосостояния.
Спасибо за поддержку! Я рад, что моё видео вам понравилось
Благодарю за столь простое объяснение🙏
Ты молодец 👍
Спасибо! Рад, что понятно объяснил. Успехов в дальнейшем изучении темы
Какой умный пацан.
Спасибо за поддержку!
@@IT_Shkolnik ты очень умен!!!
Знания ≠ Ум
@@kepka55а сам что душнила
Будущий Цукерберг, видно же что инопланетянин, он ниразу не моргнул
Чел, ну ты нереально хорош, я очень жалею, что в твоем возрасте ... пинал. Сейчас учусь в вузе, и мой самый главный враг это время, которого недостаточно на то, чтобы успевать узнавать и учить все, просто потому что не занимался этим раньше. Выпускай ролики по чаще, желательно еще бы что то про нейросети от тебя послушал. Как написали ниже, тема очень глубокая, так что контента можно много пилить, особенно учитывая тот факт, что нейронки сейчас используются повсеместно, а хорошего материала на русском ютубе просто нету
Согласен на русском ютубе вообще мало такого контента. Здесь я постарался объяснить нейронки так как понял их сам + максимально просто чтобы было понятно всем. Видео с объяснениями на канале будут дальше, но не думаю что про нейросети. Больше про алгоритмы, и языки программирования
Тоже учусь заочно на IT , мне 28 , работа семья, времени очень мало, можно сказать нету. Тоже теперь жалею что пинал ... в твои года.
Ну вот тут двоякий вопрос.
Те, кто учился в молодости завидует тем, кто пинал ...
А те, кто пинал ... завидует тем, кто учился в это время
Чел, ну походу ты бездарь или лодырь или и то и то, если не можешь вкатиться в эту шляпу. Нужен максимум год, чтобы +- отдуплять что-то. Знаком лично с людьми, которые и в 25 и в 30 успешно становились разработчиками. Ты сам создал себе какие-то рамки в виде возраста и времени, которые тебе мешают развиваться.
Ну зависит што... явно тебе и сичас ненадо ето, мб гдето код написать для бота, но ето чисто увлечение.
Спасибо за пример. Наконец-то умный человек нашёлся, который объяснил на примере а не теории.
Тут надо держать баланс теория-практика. Спасибо!
Тот самый момент, когда какой то школьник объясняет лучше специалистов в этой сфере
Суть глаголешь)
Оставлю в поддержку Никиты, коммент для алгоритмов ютуба ) Круто молодец, тебя ждет большое будущее, не забрасывай!
Мегахорош. Я наконец-то хоть начал понимать, что это такое и с чем кодить.
Рад, что я смог вам помочь. Продолжайте разбираться в теме, она очень интересная
Очень приятно было смотреть твоё видео! Все сложные для меня вещи, объяснил просто и понятно. Спасибо! Желаю тебе успеха во всех твоих делах!
Я очень рад что смог доходчиво объяснить. Спасибо большое!
Спасибо, добрый юноша! Вы так хорошо все объяснили, что даже мне, гуманитарию, понятно. У вас кроме математических способностей еще и педагогический талант. Не растеряйте только всё это! Единственное замечание - темп речи, как в рекламном ролике. Объяснять все же лучше чуть медленнее.
Спасибо за совет, рад что помог понять вам тему :)
Будучи глубоким дедушкой, смотрю его на скорости 0.75) с повторами и неоднократными.
Скорость видео можно настроить самостоятельно
зайца сосни
медленно, имеется ввиду не медленно по скорости, а более развернуто, наглядно, с примерами из жизни, приводя больше ассоциаций @@164neil
Блин, красава чувак, очень впечатляет твой уровень компетенции относительно твоего возраста!
Большое спасибо!
Ну что могу сказать? Браво! Особенно порадовало желание разобраться в велосипеде) Какой деликатный камень в огород Пайтона в комментарии. Есть правда один нюанс, который портит всю картину. Обучение обратным распространением подразумевает взятие производной от функции активации, не увидел в коде.
Я офигел! Спасибо за понятное объяснение. Много по теме смотрел, а нормально объяснил только ты.
Рад, что смог вам помочь. Да, действительно большинство объяснений которые я пересмотрел были не совсем понятные, мне пришлось пересматривать некоторые моменты по несколько раз, а потом суммировать полученную информацию. А также экспериментировать прежде чем получить эту программу
друг, твоё видео реально классное и ты большой молодец по тому что стараешься досконально понять тему (написать код на Си), но так же важно разбираться и в математике того о чём ты говоришь. На самом деле очень нехватило понятного математического доказательства, а так всё круто спасибо за видео
Объяснил как сам понял, наверное. Спасибо
Как же не хватало таких видео на старте обучения. Автор большой молодец👍
Спасибо большое!
не стоит смотреть такие видосы на старте обучение, ибо парень делает просто контент, к сожалению информативность близка к нулю
@@stepaside6284 Каждому, - свое.
@@stepaside6284 конкретно здесь я делал акцент больше на понимании материала
Решил что то менять в жизни, спасибо большое за подробное видео пока у меня не хватает навыков что бы понять все, буду смотреть все твои видео может получится реально стать программистом, лайк подписка. Спасибо
Большое спасибо. Получилось действительно простое и понятное объяснение.
Спасибо наконец та нашёл понятное видео для старта моего проекта
Молодчик. Он на шаг выше в обучении, которое понятно, чем специализированные школы
Спасибо большое. Не сказал бы, просто разобрался в теме и решил объяснить
80% преподов так качественно не разжовывают информацию
Я здесь постарался совместить все что знаю о теме и рассказать это так, чтобы было понятно практически любому :)
10-я строчка кода: return (a 0;
20-я строка кода, вернее вся функция train.
int* привести к double * - это, конечно, сильно (я уж молчу про небезопасно), не проще ли тогда изначально объявить массив data как double? Ну это же удобнее. Т.е. просто объявляем нашу функцию void train(double data[4][3], int exp[4), и в main'e объявляем double trainingdata[4][3], и все, и не нужно есть кактус.
33-я строчка: int expresults[4] = {0, 0, 1}; - это тоже сильно.
к тому же, вроде как у нас была таблица
1,0,1 = 1
0,0,1 = 0
1,1,1 = 1
1,0,0 = 1
0,1,0 = 0
а в итоге мы почему-то используем таблицу
0,0,1 = 0
0,1,1 = 0
1,0,1 = 1
0,1,0 = ? (0 по дефолту, но это не точно)
да, у нас массив из 4 элементов инициируется только 3-мя значениями, так что на месте последнего элемента у нас по чистой случайности правильный 0, просто повезло, так что берем и смело переписываем:
double trainingdata[4][3] = { {1,0,1}, {0,0,1}, {1,1,1}, {1,0,0} };
int i, expresults[4] = {1,0,1,1};
/* .... */
double newdata[] = {1,1,0};
И, кстати, да, а для чего у нас тут windows.h? Мы ничего из него не используем, но зачем-то инклудим. Зачем?
З.Ы. fmod( rand()%100000000 * 0.1, 1.05 ) ... ну-у-у-у.... ээ-это-о-о-о... а не проще ли w[i] = rand() % 11 / 10.0;
Не? Никак? Низя? Работать не будет? Точно?
Да и в целом, у нас на входе 3 животинки, а на выходе только 2 (либо 0, либо 1). Эх, жизнь не справедлива. Кто-то определенно не дополз до финиша. Либо задача составлена некорректно.
В общем, еще есть куда расти. Успехов. :)
Based.
интересно сколько тебе лет гений?
Все же нейросети гораздо сложнее, чем объяснение за 15 минут) Мне на своем курсе удавалось рассказать за 5-7 пар, причем это 2-3 курсу в вузе)). Там на самом деле куча математики и формул. Так что, если реально хотите понимать как устроены и почему работают нейронки, вам придется учить все с нуля. Иначе это просто нереально (по себе знаю). А так, попытка неплохая) Причем больше удивился тому, что пишешь на C. Все таки нечасто увидишь столь молодых людей на C/++. Это к моменту о том, что люди знакомясь с программированием считают знание нескольких строк кода на питоне - "программированием". В общем удачи в продвижении))
Вау! Я удивлён что меня смотрят преподаватели. Спасибо большое вам за комментарий, они очень сильно мотивируют снимать подобный контент дальше. Я конечно знал что там куча формул и все такое, но целью видео было ввести в курс дела, и я когда его делал сам недавно познакомился с этой темой. Это обширная и интересная тема, но пока я изучаю углубленно лишь язык С. Он занимает отдельное место в моем сердечке :з Синтаксис языка просто идеален, и тут даже придраться не к чему в отличии от того же Паскаля или Алгола. Мне кажется что человек в любом возрасте может использовать инструмент, если знает как. Вы верно подметили про подростков, считающих что несколько строк на питоне это "программирование". Действительно жаль что молодое поколение во всем выбирает лёгкий путь. И да я вообще не люблю питон, у меня аллергия на интерпретаторы, высокий уровень, и динамическую типизацию. Ещё раз спасибо за коммент, так ролики чаще попадают в реки))
Раз уж вы тут про языки, тогда может сможете пояснить пню, почему почти во всех материалах на тему машинного обучения речь идёт именно о питоне? Я так понимаю из коробки всякие си работают шустрее из-за строгой типизации и компиляции(хотя помнится мне, что с какими-то библиотеками и интерпретаторами разница не очень заметна, не уверен). В чем вообще преимущества си перед питоном, и наоборот, в контексте данных задач?
@@rxrx0255 вообще на С можно написать всё что угодно - от ОС до нейросетей. Но я сталкивался с проблемой такой же как вы, что в большинстве материалов по машинному обучению приводят в пример код на питоне. Я кажется могу объяснять - всё дело в простоте. Вы можете писать нейросети на чем угодно - даже на чистом ассемблере, но вы хотите сосредоточится на самом алгоритме и его реализации, а не на том как работает процессор, и какие регистры можно использовать на запись. Питон - полностью абстрагирует программиста от работы с аппаратной частью - вы излагайте что надо делать машине простым английским языком. Это и есть разница между высокоуровневым и низкоуровневым программированием. А что касается преимуществ С/С++ в данной сфере (ИИ) то они быстрые по своей природе, и ваша нейросеть будет работать быстрее чем на питоне. Правда стоит вопрос - а сможете ли вы её написать на чистом С? Ну там указатели, адреса, malloc, и так далее что отвлекает от алгоритма. Я сам с этим сталкивался, но не в коем случае не хочу переходить на питон, каких бы трудностей мне это не стоило, т.к. я не фанат высокого уровня, и скорость выполнения для меня важнее чем скорость написания кода и отладки ошибок - это ли не есть программирование? Итого могу сказать что питон прост для восприятия, и помогает концентрироваться на математике, поэтому и приводятся примеры именно на нем. Если бы я писал книгу по нейросетям я бы мог написать что то такое на С:
uint32_t *weights = (int*)calloc(3U, sizeof(uint32_t));
…
free((void*)weights);
Но не думаю, что все бы это поняли, ведь тут в отличии от питона надо хоть чуть чуть понимать из чего состоит С. И да Python можно в значительной мере ускорить с помощью JIT компилятора NumPy. Но он никогда не обойдёт по скорости вычислений чистый С, это невозможно физически. Я вот недавно учавствовал в олимпиаде ВСОШ по программированию, и вот там С меня подвёл тем что писать долго - продумывать надо. Но вы не волнуйтесь - все питонисты провалили тест на время выполнения XD
@You Tube Это целых 9
@You Tube узколобо
Это было здорово! Просто и понятно🫶🏼 Лайк, подписка👍🏼 Посмотрю остальные видео!
отличный выпуск.продолжай.буду смотреть каждое твоё видео.класс.
Спасибо, правда пока не знаю что снимать, и времени особо не хватает
Падает самооценка, когда тебя смотрю. А заодно появляется мотивация
Спасибо за комментарий. Никогда не останавливайся, двигайся только вперёд. Я в тебя верю!
@@IT_Shkolnik спасибо!
Урок интересный, объяснения понятны. Продолжайте!
Спасибо за комментарий, рад что вам понравилось :)
достаточно простым языком объяснил, ты заслуживаешь больше подписчиков!
Спасибо большое!
не заслуживает, заслуживает Сергей Балакирев
Крутое и полезное видео) Благодарю!
Ты очень умный парень!!! Я рад,что такие,как ты люди существует
Спасибо, да я сам ещё учусь )
Парень, да Вы реально крут!!! Спасибо. Особенно за ясность в изложении..
Спасибо! Я рад что вам помогло моё объяснение :)
12:00 Почему инициализируем expresults[4] = {0, 0, 1}. Нужно же expresults[4] = {0, 0, 1, 0}, верно я понимаю?
Спасибо за вашу внимательность, это писали уже раньше, в описании исправил
Чувак спасибо, мне 15, у тебя единственное нормальное объяснение из тех что я нашёл, теперь буду идти дальше и разбираться с LLM)
Что это такое “LLM”?!?!
Рад что смог понятно объяснить!
Респект! Дорогу осилит идущий!
Вот тебе и школота, блин!)) Красава, парень!)
Емае я крутой 30 летний разработчик,до сих пор смотрю туториалы от школьников
подписка, все структурно рассказал 👍
Ну не плохо, давай следующий урок
Спасибо, рад что вам понравилось! Я сейчас работаю над новым интересным роликом.
ты гений делаешь качественный контент молодец😄
Реально, вообще кайф!! Есть тг канал? Заведи пожалуйста. Я часов 10 потратил на исследование темы нейросетей (математика на высоком уровне, в программировании 3 года опыта) и нифига не понял. А тут абсолютно понятно. Очень хочу тг канал
Спасибо! Очень полезное и доходчивое объяснение. Возможно, ещё следует, уделить некоторое внимание сохранению и восстановлению данных натренированной сети. Как правило это не обсуждается. Видимо, считается, что это и так понятно, хотя ...
Да, правильно. Но это легко сделать. Самый простой способ - записать массив весов в двоичном виде в файл. А при запуске сети не тренировать её заново, а просто загрузить веса из файла
Просто лучший!
Большое спасибо!!
А во втором уравнении, где к текущему весу умножается произведение цены ошибки на скорость и вход, что за вход, зачем он нужен?
тоже не понял этого, нашли ответ?
Вход это сигнал от входного нейрона к весу (типо если сигнал от него слабый, то вес не сильно влияет на общую картину и корректировать его смысла меньше, чем вес, у которого сигнал от входного нейрона сильнее)
Вход из данных, которые подаются на обучение
Очень интересно, но трудно понимаемая тема, особенно когда первый раз смотришь, приходится пересматривать отдельные моменты, обидно когда я не понимаю твои объяснения, думаю придётся посидеть и обдумать. С практической частью вообще не понятно, но это и ясно, я ведь не изучал ещё язык. Вообщем итог, чтобы понять твой материал или вообще материал про нейро сеть нужно несколько раз просмотреть видео, а лучше всего записать, очень приятно, что урок даёт мой сверстник, но это вызывает сомнение в его компетенции, но пока сомнений нет, спасибо за объяснение принципа работы нейронойсети типа перцептор, пойду учить язык Си. Надеюсь ролики про нейроную сеть ещё будут.
Спасибо за подробный комментарий. Мне самому было не легко разобраться в столь интересной, но запутанной теме. Да я действительно старался объяснить всё понятным языком, но думаю что людям не знакомым с программированием как правило не слишком легко даётся подобный материал.
Я сам новичок в данном деле (машинное обучение и нейросети), но всё же как понял решил объяснить другим людям, ведь кто знает, сколько людей посмотрят это видео, и оно наставит их на правильный путь, или как минимум вызовет мотивацию для дальнейшего обучения. Естественно к этой теме я ещё вернусь, но думаю точно не сейчас. Я готовлю новый ролик. Он будет по языку С, но не связан с написанием ИИ. Но потом планирую написать более сложную нейросеть, которая соответственно справляется с более сложными задачами.
Молодец, продолжай дальше про нейросети, классно и понятно обьясняешь. Но еще много чего можно рассказать, ai изображения, ai видео, ai голос, ai сложные задачи, программирование с помошью нейросети и т.п.
Спасибо!! Это да, но я ставил цель именно разобраться с основами
Привет, не так давно наткнулся на твой канал, желаю успехов тебе! Хотелось бы видеть побольше видео связанных с ИИ, довольно популярная тема. Сам недавно увлекся этим, сейчас пытаюсь выбрать язык для написания ИИ, выбор пал между с/с++ и питоном. Говорят питон лучше подходит, но лично мне больше по душе с/с++, особенно в плане синтаксиса
Привет, спасибо за комментарий! Конечно в плане синтаксиса с/с++ мне тоже больше нравятся. Но питонисты говорят что у них есть много библиотек и модулей, которые специализируются на создании различного рода нейронок. А на с/с++ это придётся писать с нуля, что мне кажется гораздо интереснее + даст углубленное понимание того как это работает, нежели просто поочередный запуск функций из библиотек
реально вундеркинд😍
Нейросеть должна выдавать 1 или 0 в зависимости от того, что стоит в 0 индексе массива, так ? Просто получается что код неправильный, так как выдает 1 даже если в 0 индексе стоит 0, но в 1 и 2 стоят единицы.
Благодарю!!!
Вдохновляющее видео !
Умничка! Просмотрела 2 раза. 😊
Я рад что вам понравилось моё объяснение)
13:49 В main в первой строке инициализации идет 4 определения входных параметров trainingdata, но тут же для них определяется массив всего из трех ожидающихся значений expresults. Тут же несоотвествие. Функция train вернет ошибку index out bounds, вероятно
Вы правильно заметили. Я уже писал в описании, что последний элемент expresults должен был быть проинициализирован нулём, а не опущен как на видео. И это действительно ошибка, ведь в соответствии со стандартом языка C ( ANSI ) - автоматические и регистровые переменные НЕ будут инициализироваться нулём при их определении. А массив expresults здесь как раз автоматическая переменная.
Также, если вы знакомы с языком С, то знайте что в С нет никаких проверок на границы массива. Мы спокойно можем записать данные по любому адресу, и исключений на уровне программы не будет. Другое дело - ОС завершит наш процесс и кинет нам SIGSEGV в ответ на наши действия.
Всё хорошо, но в цикле for у функции RightProp, вместо граничного числа 3, лучше поставить вот ту константу _weights. В main тоже надо бы избавиться от 3
Верное замечание!
А во входе может быть также число от 0 до 1?
Попробовал набор данных
int[][] trainInput = new int[][]
{
new int[] { 5, 0, 1 },
new int[] { 5, 1, 1 },
new int[] { 0, 0, 1 },
new int[] { 5, 1, 0 },
};
int[] trainOutput = new int[] {0, 0, 1, 0};
при попытке получить ответ от { 5, 0, 1 } получаю 1,
при попытке получить ответ от { 0, 0, 1 } получаю 1,
при попытке получить ответ от { 5, 1, 1 } получаю 1,
В программе есть существенная ошибка: при приведении указателя к double. От этого значение памяти по указателю не приводится к даблу, оно остаётся таким же как было, а у дабла совершенно другой формат! И соответственно на вход функции RightProt поступают совершенно некорректные значения. Приводить к даблу надо значения, а не указатель.
эмм. передача int массива в right_props через double* каст, приведёт к тому, что массив inputs будет хранить неправильно интерпретируемые данные. код не рабочий получается
И это далеко не все его проблемы. :) По факту код вообще не рабочий.
Я себе нормальных айтишников не могу найти, а они еще в школе учатся)
Молодец, так держать!
6:31 - всё немного не так. Допустим у нас есть лыжник, он упал на гору, ему нужно спуститься в самый низ. горы имеют локальный и глобальный минимум. В его распоряжении есть джетпак, который ускоряет его движение на константу LR, что позволяет проезжать локальные минимумы и даёт шанс попасть в САМУЮ низкую точку. Но мы не знаем, где будет такая точка и какое ускорение нам потребуется для её достижения, поэтому скорость обучения надо подбирать.
Ваще пофиг
Массив expresults[4] длинной 4 инициализирован массивом из 3 значений. Теперь думаем какую ошибку он получил в функции train(). Картинка на 2:10 содержит одну матрицу, training data[4][3] содержит другие значения. Ты сколько записывал это видео?
Автор крут!
Спасибо :)
Этот парень понимает в искусственном интеллекте больше чем Гурулёв! ;-)
Молодец! Так держать!
Мне всегда вспоминается Ералаш, начинающийся словами "Дети наша опора! Им жить и работать в двадцать первом веке!"
ruclips.net/video/fwpsL3E_U9g/видео.htmlsi=CC0b9sJlkgjvJuC2&t=15
Красавчик!!!! продолжай!!!!
Спасибо, обязательно!
Моё почтение
Школьник? Да ты Мужчина, братец, спасибо!
Парень ты молодец вообще! Спасибо за интересный ролик! С меня подписка и лайк!
Делай пожалуйста побольше роликов по этой теме!
Спасибо вам! Ролики будут
Здравствуйте, поставил другие примеры не работает, если зависимым параметров является не первый параметр, а второй или третий
А как ты сам учил это все, какие книги / видео использовал?
Искал в интернете контент по нейросетям. Смотрел разные видео на ютубе от разных авторов пока не уловил суть. Читал статьи. Потом решил сделать такое видео, которое совмещает в себе теорию и практику так, чтобы был понятен сам принцип, на который можно опираться при дальнейшем обучении
Новый winderton на замену растёт 😊
За Winderton'а респект)
Очень интересно, но не хрена не просто! Надо знать язык программирования, понимать «элементарные» правила анализа и т.д. Но, парень молодец!
И то верно, хоть какая-то база всё же нужна, но я постарался объяснить некоторые моменты и оттуда тоже. Спасибо!
Очень классный ролик, респект. Объясняешь лучше взрослых)
Спасибо! Не сказал бы что лучше, но старался, и так классно получилось)
Давать информацию с такой скоростью, все равно что пытаться прочесть сказку о царе Салтане за 10 -20 минут-через пять минут перестанешь воспринимать информацию
для тебя добавили кнопочку паузы в плеере
Ай молодец)
Это конечно классно что всем всё в видео понятно, но я уже зная как работает нейросеть и написав несколько своих, не могу понять что в этом ролике объясняется
Возможно, вы использовали библиотеки, а здесь объясняется то как работают вещи изнутри
@@IT_Shkolnik , нет, я создавал свои собственные библиотеки)
Я считал себя умным для своего возраста, но он... он меня пугает😂
ITSchüler😂👍 красава. С меня подписон.
Код немного странный. Например, weights лучше объявлять не как define, а как const int. И непонятно, зачем ты её объявил, если потом вместо неё при проверках использовал её значение (3). Очевидно, объявлять значение весов как переменную стоит только в случае, если изменение данной переменной изменит количество весов.
Наш перцептрон должен делать тоже самое что сейчас делал ваш мозг😂😂😂😂
С первой секунды подумал, что сейчас будет что то из рубрики- сегодня мы поговорим о бравл старс)) но блин, мое почтение, крутой) мы в твоем возрасте палкой крапиву пизд.и)) давай юный Бил Гейтс, покажи им всем)
Нейронная сеть : реализация в бравл старс :) Спасибо!
Развития вашему каналу🔥🔥🔥
Спасибо вам!
Жаль, что ты забросил канал. Ты снимаешь качественный контент, а учитывая твой возраст, это прибавляет тебе дополнительных очков репутации.
Кто сказал, что забросил, нет конечно)
Скоро продолжу делать видосы, просто недостаток времени и технические трудности внесли свой вклад в частоту выхода роликов
@@IT_Shkolnikпросто я это к тому, что твой контент вызывает уважение, сам с недавних пор решил вкатиться в изучении ИИ, и нашёл твой ролик весьма интересным.
@@justboy4743 рад это слышать!
Крут
Спасибо
Какие ещё типы нейронок существуют? И чем они отличаются? Например, если мы получаем описания животного и надо поделить на группы, пример: вид, цвет, имеет ли хвост, клюв и тд.
Это за рамками простой нейросети, и я если честно не знаю
Никита, продолжай так-же, ты лучший канал по программированию с офигенной подачей
Спасибо большое за отзыв! Обязательно буду продолжать, новый ролик уже на подходе )
занудная торопливая подача
@@alexandrosipov4186 Постараюсь улучшить качество
спасибо за С
Всегда пожалуйста! Мой любимый ЯП, поэтому и на C
как я завидую молодым ребятам сейчас... когда я учился у нас небыло столько класных и интересных штук, и интернет был по карточкам ))) парни, учитесь, пока у вас нет обязательств выбирайте то что по душе, пробуйте постоянно что-то новое, ну а потом конечне ни в коем случае не работайте за копейки! ) Кто работает за копейки тот предатель сообщества!
Спасибо за советы! Пробовать что-то новое всегда полезно и интересно
Для понимания темы необходимо иметь базовые знания в программировании. Стоит отметить что в этом видео гораздо более приземистo и понятно объясненa суть. Насколько это возможно конечно. Спасибо за старание, очень полезнo и познавательнo!
И ни в коем случае не переставай записывать ролики В подобном формате.
Огромное спасибо за поддержку!
Спросил у Got чата, ставить лайк или нет этому видосу .. Чат сказал дизлайк поставить.. Думаю нейросеть не любит конкурентов!😂😅😂.. я принял соломоново решение -просто написать коммент под видео😮😅😂
Вы всё правильно сделали, поздравляю!
Молодец !
Красава!у тебя будет отличное будущее продолжай!!создай своё сообщество и команду! а дальше компания деньги и яндекс в опу)
Спасибо, обязательно
Напиши свой сайт и создай сообщества во всех социальных сетях! Дальше ты уже сам поймёшь что тебе делать и это естественно тебе надо будет автоматизировать! Удачи Мужик!!
Хорош. Не забрасывай развивать свой мозг. Со временем если перестанешь этого делать - начнется деградация и вернуться к тому что было будет тяжело, особенно мышление. Мозгу свойственно забывать то что не используешь. Кажется мозг стирает то что не используешь ровно так же как и обучается)
Да хорошо, понял! Я не забрасывал, просто от ютуба немного отошёл в последнее время. А так сам продолжаю конечно учиться. Спасибо
Привет, молодец, желаю тебе миллион подписчиков на канал! Именно такие как ты должны быть в топе, а не трясущие жопами человекоподобные существа 😉
Спасибо огромное!! К сожалению, мир несправедлив хаха
Круто! Продолжай
Спасибо!
3:34 0.33 *0.1 = 0.033 не 0.0033