@Andrei1penguin1

Как увеличиваются фильтры в CNN?

Доброго времени суток, проконсультируйте пожалуйста по следующему моменту в работе свертки:
Вот у нас допустим есть на входе цветное изображение 100×100×3
Мы продаем его на свёрточный слой
Инициализировали фильтры (пусть 16 фильтров (3,3) с нулевым паддингом) и получили выход 100×100×16
Подали в активацию, получили те же 100×100×16
Подали в макспулинг, получили 50×50×16
Подали в следующий слой с количеством фильтров 32, выход должен быть 50×50×32
Собственно вопрос: как из 16 фильтров мы должны получить 32?
Мы должны инициализировать заново новые 16 фильтров, или инициализировать только 16, сохранив предыдущие 16?
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
@kamenyuga
Ответ на это вопрос очевиден, если знать, что такое фильтр сверточного слоя в нейронных сетях. В случае с изображениями - это трехмерный тензор (матрица), вот так вот просто, никакой магии. А теперь конкретика и умножение целых чисел.

На входе идут изображения 100х100х3. Размер ядра фильтра 3х3, значит, каждый фильтр имеет размер 3х3х3, всего их 16 штук, следовательно ((3*3*3) + 1) * 16 = 448 обучаемых коэффициентов (trainable parameter). Потом макспулинг, размер уменьшается до 50х50, количество фильтров не меняется. Выход имеет размер 50х50х16. Фильтры применяются к изображению 100*100*16 = 160к раз. Выход - это результат применения фильтров к изображению, т.е. новое изображение, именно оно подается дальше, никакие фильтры тут дальше не передаются. Фильтры - это как распылитель на покрасочном конвейере, распылитель наносит краску на деталь, фильтр преобразует изображение. Как может фильтр передаваться дальше? Никак. Это противоестественно.

Потом идут новые 32 фильтра с ядром 3х3 и размером 3х3х16. Следовательно, ((3*3*16) + 1) * 32 = 4460 обучаемых коэффициентов. Фильтры применяются к изображению 50*50*32 = 80к раз. Выход перед макспулингом имеет размер 50х50х32. Потом опять макспулинг или флэттен слой (flatten).

По итогу общее количество фильтров = 16 + 32. Общее количество обучаемых параметров = 448 + 4460. Фильтры помножены на изображение 240к раз. Вот только в этом маленьком кусочке из двух сверточных слоев (conv2d).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Берутся входные 16 слоёв прогоняются через свои 16 слоёв фильтра и выдаётся 1 слой на выходе. Затем входные 16 прогоняются через другие 16 фильтров, чтобы получить 2 слой на выходе. И так 32 раза.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы