Практические советы по обработке изображений

Здравствуйте и вновь добро пожаловать на занятия по теме «Свёрточные нейронные сети: глубокое обучение на языке Python, часть 3».

В одной из предыдущих лекций я задал вам вопрос: как бы вы научили нейронную сеть справляться с вращательной инвариантностью?

Вы знаете, как справляться с переходной инвариантностью – путём сдвига фильтра вдоль изображения и построения признаков вдоль этих фрагментов. Но заметьте, что существуют и другие виды инвариантности, например: красная девятка должна быть так же идентифицирована, как и синяя девятка, ведь это одна и та же цифра 9 – это называется цветовой инвариантностью. Существует и размерная инвариантность – маленькая девятка должна так же распознаваться, как и большая. Не забывайте, что одна и главных причин популярности глубокого обучения состоит в том, что теперь у нас есть намного больше данных и намного больше вычислительных мощностей для обработки этих данных. Следовательно, очевидный выход – перемножить количество имеющихся данных на порядок их следования или их размер. Поэтому вы можете самостоятельно вращать имеющиеся данные, преобразовать их, изменить размер или цвет, ведь у вас уже есть метки и вы знаете, каким должен быть ответ.

Далее, как вы могли заметить, нейронные сети становятся всё крупнее и крупнее и требуют всё большего времени для обучения. Существует ряд способов обойти это препятствие – например, использовать графический процессор на Amazon Web Services или распределить работу по ряду машин, если хотите проверить различные значения гиперпараметров, ведь их появилось довольно много в этом курсе – количество ядер для каждого слоя свёртки, размер ядра, величина понижения дискретизации. Если вы хотите узнать больше о поисковых алгоритмах для подбора гиперпараметров и узнать, как запускать код с использованием графического процессора, я советую обратиться ко 2-й части данного цикла, находящейся по адресу.

Но вот что необходимо учитывать. Мы прошли долгий путь с того момента, когда познакомились с линейной регрессией, представляющей собой лишь уравнение:

y = w^T x +b.

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

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

Второе. Находим целевой функции J, являющуюся отрицательным логарифмом функции правдоподобия.

Третье. Используем градиентный спуск для вычисления обновлений весовых коэффициентов:

W \leftarrow W - \bigtriangledown J.

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

В качестве упражнения предлагаю вам создать свёрточную нейронную сеть и опробовать её на базе данных MNIST, рассматривавшейся ранее, после чего сравнить, как свёрточная нейронная сеть работает по сравнению с обычной полносвязной нейронной сетью. Это должно быть очень просто, ведь теперь вы уже опытные, а всё, что здесь требуется, – изменить количество каналов с 3 до 1, так как MNIST не содержит цвета.

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: