Параметры обучаемой свертки 1×1

Вопрос или проблема

Вот фрагмент кода, где я добавляю два сверточных слоя: один с фильтром 3×3, за которым следует слой с фильтром 1×1. Хотя я уверен, как рассчитываются параметры для фильтра 3×3, я не смог понять расчет обучаемых параметров для сверточного слоя 1×1. Не могли бы вы помочь мне понять?

model = Sequential()
inputShape = (227, 227, 3)
model.add(Conv2D(32, (3, 3), padding="same",
 input_shape=inputShape))
model.add(Conv2D(32, (1,1)))

При запуске model.summary() вывод выглядит следующим образом:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_5 (Conv2D)            (None, 227, 227, 32)      896       
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 227, 227, 32)      1056      
=================================================================
Total params: 1,952
Trainable params: 1,952
Non-trainable params: 0

Как был рассчитан 1056 параметров для сверточного слоя 1×1?

Количество параметров в сверточном слое можно рассчитать с использованием следующей формулы: (ширина_фильтра * высота_фильтра * количество_фильтров_входа) + 1) * количество_фильтров_выхода. Подставляя числа для вашего примера, получаем ((1 * 1 * 32) + 1) * 32 = 33 * 32 = 1056, что соответствует числу, которое вы получаете из model.summary(). Из этих 1056 параметров 1024 (1 * 1 * 32 * 32) – это веса слоя, а остальные 32 (1 * 32) – это смещения слоя.

Ответ или решение

Вопрос об обучаемых параметрах сверточных слоев, особенно с использованием 1×1 свертки, часто вызывает недоумение среди специалистов в области IT и глубокого обучения. Давайте внимательно рассмотрим, как рассчитываются эти параметры и поймем, почему количество параметров для вашего слоя 1×1 составляет 1056.

Параметры свертки

Количество параметров в сверточном слое вычисляется по следующей формуле:

[
\text{Количество параметров} = (\text{ширина фильтра} \times \text{высота фильтра} \times \text{количество входных фильтров} + 1) \times \text{количество выходных фильтров}
]

Где:

  • ширина фильтра и высота фильтра – размеры свертки (в вашем случае 1×1; это означает, что фильтр охватывает один пиксель).
  • количество входных фильтров – это количество каналов на предыдущем слое (в вашем случае это 32 канала, созданные первым слоем с фильтром 3×3).
  • количество выходных фильтров – это количество фильтров, которые вы определяете для данного слоя (в вашем случае также 32).

Применение формулы к вашему примеру:

Подставим значения в формулу для 1×1 сверточного слоя:

  1. Ширина и высота фильтра: (1 \times 1)
  2. Количество входных фильтров: 32 (из предыдущего слоя)
  3. Количество выходных фильтров: 32

Подставляем в формулу:

[
(1 \times 1 \times 32 + 1) \times 32 = (32 + 1) \times 32 = 33 \times 32 = 1056
]

Разделение параметров

Теперь, давайте рассмотрим, как распределяются эти параметры:

  • 1024 весовых параметров: это результат (1 \times 1 \times 32 \times 32), где 32 – это количество выходных фильтров (веса между входными и выходными фильтрами).
  • 32 смещения: каждая свертка имеет смещение, которое добавляется к значению после фильтрации. Поскольку у вас 32 выходных фильтра, будет 32 смещения.

Резюме

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

Когда вы запускаете model.summary(), вы видите, что количество параметров для последнего слоя составляет 1056, что полностью совпадает с нашим расчетом. Такой подход к пониманию параметров поможет вам в дальнейшем проектировании и обучении нейросетей, улучшая их эффективность и точность.

Если у вас есть дополнительные вопросы по этой теме или другим аспектам глубокого обучения, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...