Застрял понимание блока идентичности ResNet и сверточных блоков - PullRequest
0 голосов
/ 02 октября 2019

Я изучаю Остаточные сети (ResNet50) из лекций Эндрю Нг. Я понимаю, что одна из основных причин, по которой работают ResNets, заключается в том, что они могут изучать функцию идентификации, и поэтому добавление в сеть все большего и большего количества слоев не влияет на производительность сети.

Теперь, как описано в лекциях, в ResNets используются два типа блоков: 1) Идентификационный блок и Сверточный блок.

Блок идентификации используется, когда нет изменений во входных и выходных размерах. Сверточный блок почти такой же, как и единичный блок, но в пути short-cut есть сверточный слой, чтобы просто изменить размерность так, чтобы размерность входных и выходных соответствовала.

Вот идентификационный блок:

enter image description here

, а вот сверточный блок:

enter image description here

Теперь в реализации сверточного блока (2-е изображение) первый блок (т. Е. conv2d --> BatchNorm --> ReLu реализован с 1x1 сверткой и шагом> 1.

# First component of main path 
X = Conv2D(F1, (1, 1), strides = (s,s), name = conv_name_base + '2a', padding = 'valid', kernel_initializer = glorot_uniform(seed=0))(X)
X = BatchNormalization(axis = 3, name = bn_name_base + '2a')(X)
X = Activation('relu')(X)

ДонНе понимаю причину сохранения шага> 1 с размером окна 1. Разве это не просто потеря данных? В данном случае мы просто рассматриваем альтернативные пиксели.

Какая должна быть возможная причина для выбора такого гиперпараметра? Любое интуитивное объяснение поможет! Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я не понимаю причину, по которой следует поддерживать шаг> 1 с размером окна 1. Разве это не просто потеря данных?

Пожалуйста, обратитесь к разделу о более глубоких архитектурах узких мест вРеснет бумага. Кроме того, рисунок 5. https://arxiv.org/pdf/1512.03385.pdf

1 x 1 свертки обычно используются для увеличения или уменьшения размерности вдоль размера фильтра. Таким образом, в архитектуре узких мест первый слой 1 x 1 уменьшает размеры, так что слой 3 x 3 должен обрабатывать меньшие размеры ввода / вывода. Затем последний слой 1 x 1 снова увеличивает размеры фильтра.

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

Из статьи

"Потому чтоЧто касается времени обучения, которое мы можем себе позволить, мы модифицируем строительный блок как конструкцию узкого места ".

0 голосов
/ 03 октября 2019

Полагаю, вы могли ответить на свой вопрос. Сверточный блок используется всякий раз, когда вам нужно изменить размер для соответствия выходных и входных размеров. При этом, как вы изменяете размер определенного объема с помощью сверток? Ну, вы меняете шаг.

Для любой данной операции свертки, принимая квадратный вход, размер выходного объема можно получить по формуле (n + 2p-f) / s +1, где nявляется входным измерением, p - это заполнение нулями, f - размер фильтра, а s - шаг. Увеличивая шаг, вы эффективно уменьшаете размер выходного объема вашего ярлыка, и, таким образом, его можно использовать таким образом, чтобы убедиться, что размеры вашего ярлыка и нижних путей будут совпадать, чтобы конечная суммабыть выполненным.

Почему тогда> 1? Что ж, если вам не нужен шаг больше, чем один, вам не понадобится изменение размера в первую очередь, и, следовательно, вы будете использовать вместо него блок идентификации.

...