Глава 4. Распознавание изображений и звуковых сигналов
159
состоящий из 28
×
28
×
1 = 784 элементов, в другой тензор, состоящий из 28
×
28
×
8 =
= 4608 элементов. А сколько бы потребовалось параметров при реализации такого
преобразования с помощью плотного слоя? Ответ: 784
×
4608 = 3 612 672 (не считая
смещения), то есть почти в 18 тысяч раз больше, чем у слоя conv2d! Этот мысленный
эксперимент наглядно демонстрирует эффективность сверточных слоев.
Прелесть локальности и единства параметров слоя conv2d не только в эффек
тивности, но и в имитации (хотя и приближенной) работы биологических систем
зрения. Представьте себе нейроны в сетчатке глаза. На каждый из них воздействует
лишь небольшой участок поля зрения глаза — так называемое
рецептивное поле
(receptive field). Расположенные в различных частях сетчатки нейроны реагируют
на световые паттерны в своих рецептивных полях примерно одинаково, аналогично
единству параметров в слоях conv2d. Более того, слои conv2d, оказывается, отлично
подходят для решения задач машинного зрения, как мы скоро увидим в примере
MNIST. conv2d — прекрасный слой нейронной сети, обладающий всеми достоин
ствами: эффективностью, безошибочностью и «биологичностью». Неудивительно,
что он столь широко применяется в глубоком обучении.
4.2.2. Слой maxPooling2d
Теперь рассмотрим следующий слой нашей модели —
maxPooling2d. Подобно слою conv2d, maxPooling2d пред
ставляет собой разновидность преобразования одного
изображения в другое. Но преобразование maxPooling2d
проще, чем conv2d. Как демонстрирует рис. 4.5, при нем
вычисляются максимальные значения пикселов в малень
ких фрагментах изображения, далее используемые в ка
честве значений пикселов выходного изображения. Код
описания и добавления в модель слоя maxPooling2d:
model.add(tf.layers.maxPooling2d({poolSize: 2,
strides: 2}));
В данном случае высота и ширина фрагментов изобра
жения равна 2
×
2 в силу равного
[2,
2]
значения параме
тра
poolSize
. Эти фрагменты изображения извлекаются
через каждые два пиксела по обоим измерениям. Такой
промежуток между фрагментами изображения обуславли
вается используемым значением
[2,
2]
параметра
strides
.
В результате высота и ширина выходного изображения
с формой
[12,
12,
8]
в формате HWC составляют лишь
половину от высоты и ширины входного изображения
(с формой
[24,
24,
8]
), а количество каналов совпадает.
Слой maxPooling2d в сверточной сети служит двум
целям. Вопервых, снижает чувствительность сети к точ
ному местоположению ключевых признаков во входном
Рис. 4.5.
Работа слоя
maxPooling2d, на примере
крошечного изображения
4
×
4 с параметрами
poolSize = [2, 2]
и strides = [2, 2].
Измерение глубины
не показано, но операция
субдискретизации
с выбором максимального
значения происходит
по отдельности
по измерениям
160
Do'stlaringiz bilan baham: |