нейросеть в Qt #1

Пишем код в Qt.
В этом ролике мы начнем писать простой однослойный перцептрон для распознавания цифр из набора MNIST. Мы создадим класс для нейросети, обозначим его основные элементы, заполним их значениями и напишем функцию прямого распространения.
Ссылка на телеграмм: t.me/+7UHYe4vCj2FjZWIy
Таймкоды:
00:00 - бесполезное вступление
01:02 - класс нейросети
03:23 - конструктор
09:05 - прямое распространение
11:20 - функция активации
#qt #нейросеть #перцептрон

Пікірлер: 37

  • @galayuda
    @galayuda11 ай бұрын

    Молодец! Продолжай! Ты хорошо говоришь, хорошо объясняешь сложные вещи. Такого грамотного описания написания нейросети на С++ я нигде не видел. У тебя отличный контент. Мне полезно то, что ты делаешь. Я скорее всего буду учиться нейросетям по твоему примеру. Захотел задонатить тебе пару сотен неувидел нигде ссылок куда тебе можно это сделать.

  • @username34
    @username3411 ай бұрын

    Круто! Со второго раза удалось без ошибок повторить. Спасибо за твои уроки Кот!

  • @Ewixx_
    @Ewixx_11 ай бұрын

    Урааа, очень ждала выхода этого ролика!)

  • @HessW
    @HessW11 ай бұрын

    Огромное спасибо за видео

  • @Ezik1288
    @Ezik128811 ай бұрын

    Спасибо, очень интересно

  • @le0_srv484
    @le0_srv48411 ай бұрын

    Кот - огромное спасибо!!! ❤❤❤

  • @nickhouse555
    @nickhouse55511 ай бұрын

    Отличный ролик! Начал осваивать Qt и еще интересуюсь нейросетями, а тут два в одном! Когда вторая часть?)

  • @nekolayqustom8911
    @nekolayqustom89119 ай бұрын

    Привет, видео классное, да и то что ты решил писать на C++ нейронку - довольно смелый шаг. Небольшое предложение по улучшению кода : мне кажется случайное заполнение весов и смещений всех слоев (там у тебя 4 цикла for) можно было бы вынести в отдельный метод класса, и избежать дублирования кода т.к по сути каждое заполнение вектора случайными числами - это один и тот же алгоритм с разницей лишь в названии переменных.

  • @ihtiandr9
    @ihtiandr911 ай бұрын

    супер !!! было бы неплохо еще прицепить исходник из ролика

  • @Starponyx
    @Starponyx11 ай бұрын

    Теперь надо выпускать ролики в двух версиях: с громкой музыкой и без😁

  • @ruden6623

    @ruden6623

    5 ай бұрын

    Ага, мне с тихой музыкой уже не то. С громкой лучше. И речь с громкой музыкой нормально слышно, не понимаю тех, кто жалуется

  • @Mr.Ahavzi
    @Mr.Ahavzi3 ай бұрын

    К сожалению, ролики больше не выходят, а очень бы хотелось увидеть продолжение. Если есть возможность у автора, то прошу объяснить не совсем понятный момент: почему в функции feedFoward для вычисления значений выходных нейронов снова используются значения из вектора input? Скорее там должны использоваться значения нейронов из предыдущего слоя m_hiddenNeurons.

  • @qazwsxqazwsx-wz9tz
    @qazwsxqazwsx-wz9tz11 ай бұрын

    долго искал создание нейросети именно через QT, не подскажешь сколько серий планируешь выпустить и скоро ли ждать новую?

  • @programmcat

    @programmcat

    11 ай бұрын

    Новая на днях выйдет, сколько всего пока не знаю

  • @stalker32041
    @stalker3204116 күн бұрын

    8:54, можно было бы даже сделать по-умному и вынести рандом в отдельный метод, а затем вызывать уже его и избежать лишних скобок. И - инкапсуляция. Вроде бы и необходимости в отдельных упоминаниях размеров нет, ведь можно прописать заумные геттеры(get_input_layer_size(), get_hidden_layer_size() и get_output_layer_size(), или вообще исхитриться написать что-то вроде get_layer_size(unsigned int idx)) и получать длины массивов уже через них...

  • @stalker32041
    @stalker3204116 күн бұрын

    11:34 Наверное стоит использовать встроенную математическую функцию max(0, x), простите, окно я уже открыл

  • @user-jt5pk9gt2w
    @user-jt5pk9gt2wАй бұрын

    Я преподаватель исследователь, преподаватель естественных, гуманитарных и экономических наук. Хочу создать с нуля нейросеть, которая бы оценивала работу студентов и ставила оценки, так как оценивание преподавателями субьективное. Попробую сначала пошагово проделать действия за автором и вообще понять алгоритм написания. Может здесь, есть кто- нибудь кто сможет сам создать такой ии? Поможете?

  • @inva-life
    @inva-life11 ай бұрын

    а вы можете написать нейронку для генерации статей по БД книг?

  • @programmcat

    @programmcat

    11 ай бұрын

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

  • @webgoal3287
    @webgoal328711 ай бұрын

    Один вопрос.. А разве не нужно в деструкторе удалять объект Nueral...?

  • @programmcat

    @programmcat

    11 ай бұрын

    по идее нейросеть создается 1 раз при запуске программы, второй ил третий раз она создаваться не будет. Все манипуляции будут проведены с одним объектом нейросети и удалять его нет необходимости. Когда программа закроется, все объекты удалятся сами, так что практического смысла в этом нет. Хотя я могу ошибаться

  • @webgoal3287

    @webgoal3287

    11 ай бұрын

    @@programmcat Я про это и спросил.. Если есть наследование от QOBject по идее объект должен удаляться... Или нет.. Например wxWidgets если есть наследование от wxwidows и обязательно от текущего окна только тогда удается объект иначе нужно самому удалять.. Это очень Важный вопрос.. Иначе потом будет куча проблем.. Я по началу не знал и получал ошибки исключения постоянно

  • @ShmidtVolodymyr
    @ShmidtVolodymyr11 ай бұрын

    лишилось перенести на JS

  • @AKWoland
    @AKWoland11 ай бұрын

    Блин, ну для кого ООП придумали? Создать классы для нейрона и связи, в них инкапсулировать все необходимое для них поведение. SOLIDа на вас нет. Я уж молчу про дублирование кода и копипасту.

  • @programmcat

    @programmcat

    11 ай бұрын

    Говорят, что отдельный класс для нейрона создают только геи, вот я и не стал пропагандировать гомосексуализм на своём канале

  • @AKWoland

    @AKWoland

    11 ай бұрын

    @@programmcat Говорят, что кур доят. А на личные оскорбления переходят, когда больше нечего сказать по существу. А по существу в реальной жизни при вашем подходе класс раздувается до тысяч строк кода, легко ломается при любой мало-мальской правке, а это уже багогенератор. Такой класс невозможно покрывать тестами, любой рефакторинг будет долгим и тяжелым, плюс новым разработчикам придется долго отдуплять, что за что отвечает и они постоянно рискуют наступить на скрытые грабли, про которые знает только автор этого кода. Нормальный ООП подход делает код более читабельным, он лучше поддается тестированию, сама структура кода лучше защищена от случайных багов при его изменении. Отходить от принципов ООП считаю возможным только тогда, когда стоит явная задача добиться максимально возможной производительности кода. Да, вы скажете, что это просто демонстрационный пример и суть его совсем не в этом. Но даже в этом случае не стоит приучать новичков писать говнокод.

  • @programmcat

    @programmcat

    11 ай бұрын

    @@AKWoland забавно, что ты не отличаешь принципы ООП от SOLID. По существу в реальной жизни этот код итак простой, этот проект итак простой, все принципы ООП тут соблюдаются. Посмотри как реализованы базовые классы в Qt и предъяви разработчикам за SOLID раз умный такой. Ты предлагаешь усложнить простой код абсолютно ненужными зависимостями и реально думаешь, что новичкам будет проще в нём разобраться?

  • @AKWoland

    @AKWoland

    11 ай бұрын

    @@programmcat Вот зачем опять хамить? Я вам конструктивно изложил свою точку зрения, вы вправе с ней не согласиться, но это не повод хамить. Что касается принципов ООП и SOLID, ваш код и то, и другое на приборе вертел. И если касательно SOLID я скорее всего придираюсь зря - от миддла едва ли стоит требовать глубоких познаний в этой теме и практического хорошего умения правильно применять на практике. Ну а вот в основные принципы ООП уметь - это обязательно. Хотя и SOLID - это часть ООП, в отрыве одно от другого рассматривать их нельзя. Ну и если корректно разбить код на классы - это не усложнение. Усложнение - это лепить здоровенную трудночитаемую простыню кода, в которой спустя полгода самому будет сложно разобраться. А если правильно руководствоваться принципами ООП - получится несколько небольших по объему классов, в каждом из которых по отдельности легко разобраться. Ну и самое главное - вы ваш код как тестами стали бы покрывать, будь это не демонстрационный пример?

  • @prayer4675
    @prayer467510 ай бұрын

    Ролики конечно качественные и интересные, но венгерская нотация в 2023 году всё портит.

  • @sergst8263
    @sergst826311 ай бұрын

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

  • @loplop9527

    @loplop9527

    11 ай бұрын

    Лол

  • @programmcat

    @programmcat

    11 ай бұрын

    Так не смотри, тебя же никто не заставляет

  • @sergst8263

    @sergst8263

    11 ай бұрын

    @@programmcat не обижайся, но маты - это неуважение, ни к себе, ни к подписчикам.

  • @psh828

    @psh828

    11 ай бұрын

    ​@@sergst8263неуважение это приходить за бесплатным образовательным контентом и учить автора своим понятиям о жизни. А мат это просто слова, в данном случае не несущие никакого оскорбительного или унизительного контекста.

  • @sergst8263

    @sergst8263

    11 ай бұрын

    @@psh828 Вопрос мотивов. Конструктивное замечание как-раз таки подталкивает к развитию, а желание прогибаться из-за "бесплатного контента" даёт обратный эффект. В целом, меня автор уже услышал.

Келесі