Как работают сверточные нейронные сети | #13 нейросети на Python

Что из себя представляют сверточные нейросети, их архитектура. Операции свертки (сверточные слои), операции Pooling: MaxPooling, MinPooling, AveragePooling. Их смысл. Пример архитектуры сверточной нейронной сети.
Телеграм-канал: t.me/machine_learning_selfedu
Инфо-сайт: proproprogs.ru

Пікірлер: 88

  • @selfedu_rus
    @selfedu_rus3 жыл бұрын

    Дорогие друзья! Небольшой квест. В этом видео я специально сделал небольшую арифметическую ошибку. Она не влияет на общее восприятие и понимание материала. И тот, кто обнаружит эту ошибку, тот красавчик! ))

  • @Valstan1

    @Valstan1

    3 жыл бұрын

    Хммм... хитрый ход ) Придется второй раз пересмотреть, и тут два плюса, увеличится число просмотров, и улучшится качество понимания и запоминания материала. Хорошая идея подстегивания слушателей курса к Deep learning )))

  • @Valstan1

    @Valstan1

    3 жыл бұрын

    11:26 - вот тут по-моему "ашипка", получится не 127 на 127, но 126 на 126 пикселов, так как и снизу и сверху и справа и слева теряется по пикселу. Смотрю дальше... может ишо чего замечу ) Переместил свой коммент сюда, чтобы в общей ветке другие не прочитали и не расстроились "ну вот, а я сам хотел бы поискать ашипку".

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    @@Valstan1 Красавчик! :))

  • @ywbc1217

    @ywbc1217

    3 жыл бұрын

    ​@@selfedu_rus я написал и потом удалил свой комментарий про это -- посчитав неважным -- в почте у вас должен остаться этот комментарий ) спасибо за ваши видео

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    @@ywbc1217 Спасибо, значит, вы тоже красавчик! ))

  • @Maraniks
    @Maraniks3 жыл бұрын

    Лучше всех (Из тех кого я уже просмотрел) объясняешь как устроенна нейронная сеть Спасибо теперь я больше понимаю как устроенно это все

  • @elizabethgrant6018
    @elizabethgrant60182 жыл бұрын

    Спасибо огромное за Ваши уроки!

  • @adrianchervinchuk5632
    @adrianchervinchuk56323 жыл бұрын

    огромное спасибо за доходчивость и детальность

  • @user-qe4ti2dw2u
    @user-qe4ti2dw2u3 жыл бұрын

    Хороший канал, надеюсь он наберет популярность!!!)

  • @teastrum
    @teastrum3 ай бұрын

    Спасибо большое за очень понятное объяснение!

  • @LA-nc6nc
    @LA-nc6nc Жыл бұрын

    Хороший добрый комментарий в поддержку автора канала и контента.

  • @popsusekak
    @popsusekak11 күн бұрын

    КАКОЙ ДОБРЯК!!!

  • @funreal8727
    @funreal87272 жыл бұрын

    11:37 126x126 а не 127x127 потому, что пиксели обрезаються справа и слева

  • @Neo27001

    @Neo27001

    24 күн бұрын

    а я думал добавляется один байес

  • @nickkhatkov8548
    @nickkhatkov85483 ай бұрын

    Безусловно просто и ясно.

  • @VenatoresnamIgnotis
    @VenatoresnamIgnotis2 жыл бұрын

    Подскажите пожалуйста один момент. Как следует из начала урока, один фильтр соответствует одной группе нейронов. В конце видео в примере мы получаем после пуллинга 10 карт признаков размером 16х16. Дальше вы говорите, что этот набор из 10 анализируется целиком одной группой нейронов, т.е. для каждой карты признаков (квадрата 16х16) будет свой фильтр и потом они суммируются и получается одна из 30 следующих карт признаков. Что-то не сходится у меня в голове эта мысль, как может быть получена одна из 30 карт признаков с помощью разных фильтров, из предыдущего утверждения следует что эта группа нейронов соответствует одному фильтру. Тот же вопрос про обработку многоканального изображения: если мы говорим про одноканальное изображение, то там вроде все ясно, а потом вы говорите что если каналов 3, то каждый канал обрабатывается своим фильтров (т.е. своей группой нейронов) и потом результат суммируется. Тогда получается, что для обработки 3х канального изображения нужно 3 группы нейронов, т.е. 3 фильра. Может быть все таки имеется в виду, что мы изначально берем грубо говоря 10 фильтров, и каждый канал прогоняем через эти фильтры и уже после этого суммируем? Просто что-то в голове все это не укладывается в логическую цепочку

  • @user-gu7dc5nj1g

    @user-gu7dc5nj1g

    Жыл бұрын

    класныеи видео

  • @user-fb6dj3ij7p
    @user-fb6dj3ij7p Жыл бұрын

    Спасибо. Какое большое спасибо... Помог. А то сидел тупил.

  • @86Blind
    @86Blind3 жыл бұрын

    Самое лучшие объяснения как работает нейронная сеть !!

  • @mischa1115
    @mischa111511 ай бұрын

    Учусь в GB, там рассказывал преподаватель много много много - часа три, понял, что я мягко говоря не способен учиться. здесь за 20 минут я понял, как это все работает. было бы неплохо еще рассказать, для чего делается укрупнение признаков, возможный ответ, для увеличения скорости нейронной сети, за счет экономии вычислительных мощностей?

  • @sakhaknives5567
    @sakhaknives55673 жыл бұрын

    привет! очень хорошо объяснено, спасибо за видео :) возник такой вопрос - как определить количество скрытых слоев? на 17:20 у вас 2 слоя сверточной сети, 2 слоя макс пулинга - почему именно такая конфигурация? можно ли было использовать 1 слой сверточной сети и 1 слой пулинга?

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    Да, это просто пример, конфигурации придумывает сам разработчик НС, исходя из опыта и разума )

  • @MurzNN
    @MurzNN8 ай бұрын

    Хочу уточнить, а не правильней ли будет при анализе и поиске объектов на изображении использовать всегда цветовую модель Lab а не RGB? Ведь она гораздо правильней представляет изображение с точки зрения содержимого - слой яркости показывает объекты, а a и b - их цветовые особенности. Что думаете по этому поводу?

  • @danilanelin
    @danilanelin2 жыл бұрын

    Здравствуйте, спасибо за ваши уроки, но у меня возник вопрос. К примеру у меня есть нс, которая должна определять (с камеры) есть ли маска на человеке, или нет. Возникнут ли какие либо проблемы с распознаванием, так как обучающая выборка была стандартизирована, а изображение с камеры нет?

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Да, могут возникнуть проблемы. Входные данные нужно стандартизировать также, как и при обучении НС.

  • @likey_dikey235
    @likey_dikey235 Жыл бұрын

    *Цепочка «элемент -> процесс -> элемент» (под изображением также понимаются и другие карты признаков (во 2-й цепи), MaxPool карты (в 1-й цепи, а вообще MaxPool карты - это те же карты признаков, но на прошлом шаге прошедшие обработку, операцию MaxPool)):* Изображение -> фильтр (весовая маска, где каждый вес между пикселем изображения и нейроном группы карты признаков настолько больше, насколько характернее нахождение на ожидаемом изображении точки, чтобы был составлен элемент. Таким образом, чем более изображение похоже на отбираемый фильтром элемент, тем больше будет значение нейрона, ответственного за этот отрабатываемый участок) -> Карта признаков Изображение -> операция MaxPool (выбор из каждой секции максимального значения в рамках данной секции) -> MaxPool карта *Суть в прилагательных:* Карта признаков - характерный MaxPool - наиболее выраженный ~~~ *Изменение геометрических размеров, параметров:* Новый слой карты признаков после фильтрации - увеличивается глубина ряда этого слоя. Т. к. из изображения (или из множества таких изображений, если речь идёт не о 1-м и 2-м слоях) извлекают больше 1-го признака -> фильтров и соответствующих карт признаков больше, чем их (MaxPool карт) было на предыдущем слое. Новый слой карты признаков (MaxPool карт) после операции Max Pool - уменьшается размер карты (ширина и высота). Т. к. сама операция MaxPool предполагает извлечение максимального значения из некоторых значений (а значение может называться максимальным только в сравнении с другим, а значит при их наличии). *Размерность в глаголах:* Карта признаков после фильтрации - глубина увеличивается, размерность сохраняется (но не всегда сохраняется, нужно установить соотвествующий падинг). Карта признаков после MaxPool - глубина сохраняется, размерность уменьшается (но не всегда уменьшается, однако по умолчанию падинг установлен так, что размерность уменьшается - если всё же нужно её сохранение, то можно установить соотвествующий падинг).

  • @sergeyyatsuk4794
    @sergeyyatsuk47942 жыл бұрын

    Здравствуйте, возник ряд вопросов, в ответ на которые я очень нуждаюсь. На 9:23 вы говорите, что каждая цветовая компонента обрабатывается своим отдельным фильтром, и для каждой цветовой компоненты отдельно образуется карта фильтров, затем они(карты фильтров) складываются между собой математически, по-элементно, и после того, как сума сформировалась к ней прибавляется смещение биос. В результате у нас получается числовое значение "Vk,m", оно пропускается через функцию активации и таким образом вычисляется выходное значение на выходном нейроне. Вопросы: 1) Получается, что при формировании карт признаков для цветовых компонент задействуется еще один слой нейронов? Ведь, исходя из информации, сказанной в видео-уроке, карта признаков состоит из выходных значений нейронов. То есть для формирования карт признаков для каждой цветовой компоненты используется дополнительный слой нейронов? 2) После сложения карт фильтров каждой из цветовых компонент и добавления биоса формируется "Vk,m" - матрица 3х3 (у вас в видео-уроке она имеет желтый окрас), которую вы именуете как "числовое значение", которое следовательно подается на вход активационной функции. Но ведь как матрица 3х3 может является "числовым значением Vk,m", если это так называемое "числовое значение" формируется с помощью последовательного по-элементного прибавления друг ко другу каждого элемента карт признаков цветовых компонент и в результате получается матрица 3х3, к которой в конце прибавляется смещение биос? Как такую матрицу можно именовать "числовым" значением?

  • @andreygulyaev823
    @andreygulyaev8233 ай бұрын

    Подскажите не могу понять - начальные значения w0-w8 фильтра задаются случайным образом? То есть грубо говоря мы инициализируем n фильтров и дальше грубо говоря первым фильтром проходим по всему изображению получая значения первой группы нейронов. Потом вторым наугад инициализированным фильтром вторую группу нейронов и так далее? Второй вопрос - значения w0-w8 фильтра по окончанию прохождения всех слоев корректируются и все начинается заново? Таким образом случайно сгенерированный фильтр стремится к какому-то своему "правильному" состоянию? И третий вопрос - если я правильно понял - все наугад инициализированные фильтры - часть из них могут оказаться одинаковыми а мы просто будем тратить время на прогонку этих "относительно" одинаковых фильтров по нейросети?

  • @user-ll8se2kn3e
    @user-ll8se2kn3e3 жыл бұрын

    В конце видео как из 10 каналов получилось 30 каналов можете объяснить?

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    там на последних слоях всюду 30 каналов. Но даже если нужно из 30 получить 10, то значит, используется 10 фильтров размерностями w x w x 30 каждый, где w - размер карты признаков

  • @nikgavrilov993
    @nikgavrilov9932 жыл бұрын

    Большое спасибо за видео! Вопрос - мне нужно найти слова в скане многострочного документа напечатанного на старой печатной машинке. Может ли нейронная сеть мне помочь в этом и какой Ваш урок мне в этом поможет? Заранее спасибо!

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Если это разовая работа, то проще воспользоваться программой FineReader. Иначе, вам просто придется повторять его алгоритм, а он очень не простой (и неизвестный).

  • @vadimmbld
    @vadimmbld3 жыл бұрын

    Здравствуйте, а не подскажете как здесь будет работать обучение сети методом backpropagation. Т.е формула для корректировки весов содержит умножение на входящее значение, это значит, что фильтр должен проходить так же по исходной картинке меняя постепенно свои веса?

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    Сам не погружался в математику в случае со сверточными сетями, но как пишут в литературе, здесь принципиально ничего не меняется, также идет коррекция весовых коэффициентов фильтров (сверток) с помощью packpropagation

  • @user-mm3zw3uy4q
    @user-mm3zw3uy4q Жыл бұрын

    Очень круто, спасибо! Хочу чуть-чуть поправить: не биос (BIOS), а байэс (bias).

  • @user-cv8fz4by4e

    @user-cv8fz4by4e

    8 ай бұрын

    Байэс это ученый, а это нейрон смещения биас

  • @user-qb5bo3jv3e
    @user-qb5bo3jv3e2 жыл бұрын

    Спасибо за урок! Предположим, что мы подали на вход Conv2D слою трехканальное изображение и назначили слою 64 ядра (фильтра). Правильно ли я понимаю, что под каждый канал будет выделено 64 фильтра, и работать это будет так: первый фильтр первого канала, первый фильтр второго канала, и первый фильтр третьего канала будут применены каждый к своему каналу, и результаты будут сложены, далее к этой суммарной матрице будет применен bias, а затем функция активации, и так 64 раза?

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Если на входе трехканальное изображение, то для получения одного выходного канала будут применяться три разных фильтра для входных данных, затем суммироваться, добавляться биас и так 64 раза (для формирования 64 каналов).

  • @user-qb5bo3jv3e

    @user-qb5bo3jv3e

    2 жыл бұрын

    @@selfedu_rus Ясно,спасибо!

  • @alexvincent3500
    @alexvincent35002 жыл бұрын

    Здравствуйте, а что делать, если при свёртке значение нейрона на выходе будет больше 255, его стоит оставить таким или приравнять к 255 ?

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    выходное значение может быть любым, ограничение накладывает только функция активации

  • @user-qb5bo3jv3e
    @user-qb5bo3jv3e2 жыл бұрын

    Спасибо за урок! Только жаль не упомянули о том, как именно полученные на последнем слое карты активации отправлять на вход обычной полносвязной сети. Насколько мне известно, эти карты активации нужно "вытянуть" в одномерный вектор, и этот вектор уже должен подаваться на вход полносвязной сети. Причем если этот вектор получается большим, то это может привести например к долгому обучению т.к весов соответственно понадобится больше. Если размер "вытянутого" из карт активаций вектора получается большим, то его можно уменьшить, применив тот же max pooling но с более большим окном

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Вытягивать можно произвольным образом, при обучении НС сама подстроится под данные. А в Keras есть для этого специальный слой Flatten.

  • @user-qb5bo3jv3e

    @user-qb5bo3jv3e

    2 жыл бұрын

    @@selfedu_rus Про Flatten уже увидел в следующем видео про CNN в этом плейлисте ) Спасибо!

  • @user-ek1qb2qo2u
    @user-ek1qb2qo2u3 жыл бұрын

    Привет, у меня два вопроса. Один по пониманию. 1)Каждая группа нейронов выделяет какой то признак в соответствии с ядром фильтра, и передаёт эту полученную свёртку(сумму отсканированный кусочков 3 на 3 умноженных на ядро фильтра) следующей группе нейронов, следующая группа нейронов получает свёртку с предыдущего этапа и делает тоже самое(выделает признаки и передаёт полученную свёртку дальше). Max polling я пока не рассматриваю. Сначала нужно со свёрткой разобраться. Правильно я понимаю как происходит свёртка? 2) Нейросеть обучается на картинках одинакового размера, допустим 128x128 пикселей, а что если у меня картинка 5000x2500 пикселей и я хочу её прогнать через нейросеть и получить предсказание? Спасибо.

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    1) в целом, да, верно; 2) изображения других размеров должны быть приведены к формату изображений обучающей выборки (в том числе размеру, цветовому представлению, стандартизации, если она была и т.п.)

  • @Baron_Munghausen
    @Baron_Munghausen11 ай бұрын

    Знать предмет и объяснить (передать) его несведущему совершенно разные вещи.

  • @user-of3pm6oi1m
    @user-of3pm6oi1m2 жыл бұрын

    А разве карта признаков не должна быть 30x30? Или у нас фильтр был 1 пиксель? 17:13

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Не совсем понятен вопрос. У нас карта признаков 16x16x30, после mapooling размеры уменьшаются в 2 раза по первым 2-м коордианатм и становятся 8x8x30

  • @user-of3pm6oi1m

    @user-of3pm6oi1m

    2 жыл бұрын

    @@selfedu_rus Ну на вход в нейронную сеть мы подали изображение 32х32, в первом скрытом слое пропускаем его через 10 групп нейронов, которые выполняют свертку изображения. На 11:00 вы говорили, что после прохождения маской по всему изображению, результат будет на 2 пикселя меньше (было 128х128, стало 126х126). То есть в примере на 17:00 после первого шага мы должны получить 10 карт признаков, каждая размером 30х30, или я не так понял?

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    @@user-of3pm6oi1m Это все разные вещи. Вначале я говорил, как обрабатывать границы изображений. А далее, как работает операция maxpooling.

  • @user-of3pm6oi1m

    @user-of3pm6oi1m

    2 жыл бұрын

    @@selfedu_rus Хорошо, спасибо

  • @rpuropu
    @rpuropu3 жыл бұрын

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

  • @selfedu_rus

    @selfedu_rus

    3 жыл бұрын

    MaxPooling выделяет максимальные значения на выходах каналов (сверточных слоев), то есть, сохраняет максимум информации, сокращая размерность вектора (матрицы).

  • @rpuropu

    @rpuropu

    3 жыл бұрын

    @@selfedu_rus да, я пока спал - передумал).. т.е. конечно выражение связи по вертикали в пулинге слабее, чем у фильтра 3 на 3 с средней вертикалью единичек, но всё же он передаёт инфу.. из фильтров альтернативой ему тогда будет что-то типа: 1 0 1 0 0 0 1 0 1 Если так можно выразиться) PS посмотрел следующий ролик, осознал поочерёдный алгоритм применения - успокоился)

  • @user-rz4nv7zf1x
    @user-rz4nv7zf1x2 жыл бұрын

    Не совсем понятно как нейронная сеть будет подбирать веса для своих "ядер фильтров", по какому алгоритму она их будет подправлять ?

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    также, как и для полносвязной - градиентным алгоритмом

  • @nikolaydd6219
    @nikolaydd6219 Жыл бұрын

    Как обучить нейросеть на картинках (символах) которые на 99% похожи друг на друга?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Если затем предполагаются заметно другие картинки (не похожие на те, что обучается сеть), то ничего хорошего не выйдет. Это как обучить человека немецкому языку и отправить его в Англию в надежде, что он будет что-то понимать ))

  • @nikolaydd6219

    @nikolaydd6219

    Жыл бұрын

    @@selfedu_rus Будет полезно посмотреть видео как распознать печатный текст. Я вот его пытаюсь сделать но нифига. В нете народ тоже ищет но везде только рукописный. А с печатным столько проблем оказалось) Я про случаи когда текст не сегментировать а распознавать строку с текстом, смещая выборку по X. Например символы 'но' распознаются как 100% 'ю'

  • @andreybutryakov6541
    @andreybutryakov65413 жыл бұрын

    Биос добавляется не к сумме а уже входит в нее (см. время показа 10.33)

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    Если несколько каналов, то сначала по всем каналам проходят свертки, а затем, один раз прибавляется смещение.

  • @komissarovrodion
    @komissarovrodion2 жыл бұрын

    Dislike: 17:40 размер тензора уменьшается в 4 раза, а не в 2 раза, как сказано в видео

  • @selfedu_rus

    @selfedu_rus

    2 жыл бұрын

    в 2 раза по каждой координате имелось в виду )) но формально вы правы, это нужно было уточнить

  • @komissarovrodion

    @komissarovrodion

    2 жыл бұрын

    @@selfedu_rus Like: ошибку признал

  • @alikaiyr6308

    @alikaiyr6308

    2 жыл бұрын

    @@komissarovrodion ок

  • @user-jc9yn7bm5z
    @user-jc9yn7bm5z3 жыл бұрын

    А как вычисляется градиент, как происходит распространение ошибки? Почему об этом толком никто не говорит? Говорят только о самом очевидном

  • @user-pb1ot5xy3t

    @user-pb1ot5xy3t

    3 жыл бұрын

    Про это есть отдельные уроки на этом канале

  • @alexandrkil1140
    @alexandrkil11402 жыл бұрын

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

  • @lapatun1980
    @lapatun198010 ай бұрын

    126 на 126 - вместо 127 на 127

  • @selfedu_rus

    @selfedu_rus

    10 ай бұрын

    да, есть такое ))

  • @mangod2411
    @mangod2411 Жыл бұрын

    Не пиксел, а пиксель!!!!!!!!! Пикселей, а не пикселов, пиксели, а не пикселы, и т.д.

  • @doifgoox8510
    @doifgoox8510 Жыл бұрын

    Пиксел

  • @cold_heart_i
    @cold_heart_i Жыл бұрын

    Ну по правде говоря будет на 2 пикселя меньше чем исходное изображение 126*126

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    верно! )