Тензорный поток реализует базовую операцию свертки с помощью tf .nn.conv2d.
Меня особенно интересует параметр strides, который позволяет вам установить шаг фильтра свертки - насколько далеко по изображению вы смещаете фильтр каждый раз.
Пример, приведенный в одном из ранних руководств, с шагом изображения 1 в каждом направление, это
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
Подробнее о массиве strides можно прочитать в связанных документах:
Подробно, с форматом NHWC по умолчанию ...
Должны быть шаги [0] = шаги [3] = 1. Для наиболее распространенного случая одинаковых горизонтальных и вершинных шагов strides = [1, stride, stride, 1].
Обратите внимание, что порядок шагов соответствует порядку ввода: [batch, height, width, channels]
в формате NHWC.
Очевидно, иметь шаг не 1 для batch
и channels
не имеет смысла, верно? (ваш фильтр всегда должен проходить через каждую партию и каждый канал)
Но почему тогда вообще можно поставить что-то кроме 1 в strides[0]
и strides[3]
? (где это вариант касается того факта, что вы можете поместить что-то, кроме 1, в массив python, который вы передаете, игнорируя приведенную выше цитату из документации)
Есть ли ситуация, когда у меня был бы не один шаг для измерения batch
или channels
, например
tf.nn.conv2d(x, W, strides=[2, 1, 1, 2], padding='SAME')
Если да, то что этот пример вообще означал бы с точки зрения операции свертки?