Мы уже посвятили целых 2 статьи нейронным сетям, в первой мы о общих чертах обрисовали, что такое нейросеть и с чем ее едят, даже написали ее самый простой вариант, во второй было уже больше конкретики, а именно мы рассмотрели сверточный фильтр, который необходим для реализации нейросетей, которые работают с изображениями. В этой статье я расскажу Вам об еще одном методе свертки изображения, а именно о пуллинге, который, как правило, работает в тандеме со сверточными фильтрами.
Галопом по Европам
Пуллинг – метод, при котором размеры исходного изображения уменьшаются, при этом выделяются полезные признаки, и нивелируются ненужные. Отличает его от фильтров свертки то, что в нем не используются строго определенные маски, как в фильтре Собеля допустим, но обо всем по порядку.
Если кратко и просто, наше изображение, обработанное фильтром свертки, необходимо разбить на фрагменты. Мы уже изображение, записанное в виде 2-мерного числового массива, соответственно каждый фрагмент будет представлять собой небольшие матрицы строго фиксированного размера (2х2, 3х3, 10х10, вообще любого, лучше чтобы она была квадратной).
Далее, как только мы разбили наше изображение на фрагменты, нам необходимо что то с ними сделать, и тут полет фантазий просто огромен! Мы можем сделать свой собственный фильтр и применить его к фрагментам, тут стоит сделать акцент на том, что есть разница по сравнению со сверткой. В отличие от нее, задача пуллинга в том, чтобы уменьшить исходны массив, поэтому фильтр применяется не последовательным сдвигом на 1 ячейку массива, а на длину, равную длине самого фильтра (если фильтр 3х3, то и сдвиг происходит на 3 ячейки).
В нашем случае мы не будем создавать новый фильтр, мы просто будем брать максимальный элемент из каждого фрагмента изображения, и записывать его в новый массив-строку.
Реализация
Итак, как я уже писал выше, необходимо разбить наше исходное изображение на фрагменты для того, чтобы выбрать из каждого фрагмента тот, который нам необходим. В нашем случае, это значение максимального элемента. Но для начала подготовьте датасет из грустных и веселых смайликов – нарисуйте их в Paint)).
Наш датасет – тренировочные и тестовое изображения, нет необходимости рисовать тысячу раз одно и то же, достаточно ~30-50 изображений:
Затем создайте текстовый файл ответов (к примеру 0 – это грустный, 1 – радостный) где каждый элемент запишите в отдельной строке, так проще будет импортировать его позже.
Исходное изображение должно выглядеть плюс-минус так (страшно?)):
Для начала разобьем его на фрагменты и запишем его в список.
Итак, переменная vhod – не что иное, как список с изображениями, полученными после сверточного фильтра, tensor – размер наших фрагментов, рекомендую выбирать не больше 3, но он подбирается экспериментальным путем и напрямую зависит от вашей задачи, желательно выбирать его так, чтобы размер фрагмента был кратен ширине изображения (3-18, 3-24). Для наших задач мы немного видоизменим наш сверточный фильтр для работы со множеством изображений:
Далее мы просто добавляем в новый массив срезы от старого (переменная а). Получаем на выходе следующее:
Каждый элемент списка, это новый список с фрагментами одного изображения, размерами 2х2.
Далее из каждого фрагмента выбираем максимальный и записываем его в новый массив.
Функция возвращает так же список изображений, для того, чтобы можно было в дальнейшем использовать либо свои фильтры, либо пуллинг, но нам сегодня это больше не понадобится, поэтому мы преобразуем каждое изображение в строку и вернем уже матрицу, где ширина – ширина строки изображений, а высота – число изображений и вызовем последовательно все наши функции:
Разделив массив на 255 мы уменьшим время обучения нейросети, не будет необходимости работать с большими числами.
Далее поступаем так же, как и в предыдущей нейросети:
Переменная tren_vuh – это импорт текстового файла ответов, который мы создали ранее.
Мы видим, что наша нейросеть достаточно точно определила настроение смайлика))
Итак, сегодня мы рассмотрели простейший случай применения нейросети для распознавания изображений. Конечно, для каких то серьезных проектов, одним сверточным фильтром и пуллингом мы не обойдемся, необходимо многослойная комбинация этим методов, для повышения точности нашей нейронки. Главное, что я – Ваш покорный слуга, показал вам принцип, по которому работает большинство нейросетей, дальше дело только за вами, дерзайте, комрады!))
P.S. Данная статья не является руководством к написанию нейросетей, т.к. уже давно существуют готовые библиотеки, такие как Keras, TensorFlow, предназначенные для выполнения подобных задач, в этой статье мы всего лишь рассмотрели принципы и методы, по которым они работают для того, чтобы вы разрабатывали собственную нейросеть с осознанием того, что вы вообще делаете))
- 2Поделились
ทางเข้าเล่น slotxo กราฟิกสีสันงามsloxo พีจี เพลินเล่นแล้วไม่หัวร้อนคืนผลกำไรเร็วสุดๆก็เลยได้รับความนิยมของนักการพนันเว็บไซต์พนันสล็อตที่ครอบครองใจคนที่ประทับใจการเล่น
ทาง เข้า xo เกมสล็อตออนไลน์ที่เเตกง่ายที่สุดในบรรดาเว็บสล็อตต้องมาเล่นกับเรา pgslot-th.com มีเกมให้เลือกหลากหลายรูปแบบภาพการ์ตูนสวย เด่นกว่าใครต้องเกมของระบบฝากถอนง่ายมาก
ทางเข้าเล่นpg มือถือ เว็บตรง มั่นคง ปลอดภัย เชื่อถือได้ ถอนเงินได้จริงแน่อน 100% ฝากไม่มีขั้นต่ำ งบน้อยก็เล่นได้ ตอบโจทย์นักเล่นเกมสล็อต
สล็อตทดลอง
<a href=
ทดลองเล่นสล็อต pg ซื้อฟรีสปินได้ 2023
สล็อต65
ทดลองเล่นฟรี
ibizagame888.co/