VALID padding: это с нулевым заполнением. Надеюсь, что нет путаницы.
x = tf.constant([[1., 2., 3.], [4., 5., 6.],[ 7., 8., 9.], [ 7., 8., 9.]])
x = tf.reshape(x, [1, 4, 3, 1])
valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
print (valid_pad.get_shape()) # output-->(1, 2, 1, 1)
ТО ЖЕ ВРЕМЯ: Это довольно сложно понять, во-первых, потому что мы должны рассматривать два условия отдельно, как указано в официальных документах .
Давайте возьмем ввод как
, вывод как
, заполнение как
, шаг как
и размер ядра как
(рассматривается только одно измерение)
Дело 01
:)
Дело 02
:),&space;0))
рассчитывается таким образом, чтобы минимальное значение, которое может быть принято для заполнения. Поскольку значение
известно, значение
можно найти с помощью этой формулы
.
Давайте разберем этот пример:
x = tf.constant([[1., 2., 3.], [4., 5., 6.],[ 7., 8., 9.], [ 7., 8., 9.]])
x = tf.reshape(x, [1, 4, 3, 1])
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
print (same_pad.get_shape()) # --> output (1, 2, 2, 1)
Здесь размерность х равна (3,4). Тогда, если взять горизонтальное направление (3):
&space;=&space;1,&space;n_0&space;=&space;int&space;(%5Cfrac%7B3-2+2*1%7D%7B2%7D&space;+&space;1)&space;=&space;2)
Если вертикальное направление принято (4):
&space;=&space;2)
Надеюсь, что это поможет понять, как на самом деле работает то же самое в TF.