Как ведет себя tf.nn.conv2d с фильтром четного размера?

Я прочитал этот вопрос, для которого принят только ответ упоминает квадратные фильтры нечетного размера (1x1, 3x3), и я заинтригован тем, как tf.nn.conv2d() ведет себя при использовании квадратного фильтра четного размера (например, 2x2), учитывая, что ни один из его элементов не может считаться его центром.

Если padding='VALID', то я предполагаю, что tf.nn.conv2d() будет шагать по входу так же, как если бы фильтр был нечетного размера.

Однако, если padding='SAME', как tf.nn.conv2d() выбирает центрирование фильтра четного размера над входом?


person etsetnj    schedule 29.06.2016    source источник


Ответы (2)


См. описание здесь: https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#convolution

Для ДЕЙСТВИТЕЛЬНОГО заполнения вы совершенно правы. Вы просто проходите фильтр по входу без каких-либо дополнений, каждый раз перемещая фильтр на шаг.

Для ОДИНАКОВОГО заполнения вы делаете то же самое, что и ДЕЙСТВИТЕЛЬНОЕ заполнение, но концептуально вы дополняете ввод несколькими нулями до и после каждого измерения перед вычислением свертки. Если необходимо добавить нечетное количество элементов заполнения, правая/нижняя сторона получает дополнительный элемент.

Используйте формулу pad_... в приведенной выше ссылке, чтобы определить, сколько отступов нужно добавить. Например, для простоты рассмотрим одномерную свертку. Для ввода размера 7, окна размера 2 и шага 1 вы должны добавить 1 элемент заполнения справа и 0 элементов заполнения слева.

Надеюсь, это поможет!

person Peter Hawkins    schedule 29.06.2016

когда вы выполняете фильтрацию в слое conv, вы просто получаете среднее значение каждого патча:

взяв пример ввода 1D размера 5 [1, 2, 3, 4, 5], используйте фильтр размера 2 и сделайте допустимое заполнение, шаг равен 1, вы получите вывод размера 4 (используйте среднее значение внутреннего продукта для метрики параметра веса [1,1]) [(1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2], то есть [1,5, 2,5, 3,5, 4,5 ],

если вы сделаете то же заполнение с шагом 1, вы получите вывод размера 5 [ (1+2)/2, (2+3)/2, (3+4)/2, (4+5)/2, (5 + 0)/2 ], последний 0 здесь — это заполнение 0, то есть [ 1.5, 2.5, 3.5, 4.5, 2.5 ],

и наоборот, если у вас есть вход 224 * 224, когда вы выполняете фильтрацию 2 на 2 с использованием допустимого заполнения, он выводит вывод 223 * 223.

person JH_EARTH    schedule 26.06.2018