Preenchimento VÁLIDO : este é com preenchimento zero. Espero que não haja confusão.
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)
MESMO preenchimento: isso é meio complicado de entender, porque precisamos considerar duas condições separadamente, conforme mencionado nos documentos oficiais .
Vamos considerar entrada como
, saída como
, preenchimento como
, passo como
e tamanho do kernel como
(apenas uma única dimensão é considerada)
Caso 01
::![p_i = max (ks, 0)](https://latex.codecogs.com/gif.latex?p_i&space;=&space;max(k-s&space;,0))
Caso 02
::![p_i = max (k - (n_i \ mod s)), 0)](https://latex.codecogs.com/gif.latex?p_i&space;=&space;max(k&space;-&space;(n_i%5Cmod&space;s)),&space;0))
é calculado de modo que o valor mínimo que pode ser obtido para o preenchimento. Como o valor de
é conhecido, o valor de
pode ser encontrado usando esta fórmula
.
Vamos elaborar este exemplo:
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)
Aqui a dimensão de x é (3,4). Então, se a direção horizontal for tomada (3):
![n_i = 3, k = 2, s = 2, p_i = 2 - (3 \ mod 2) = 1, n_0 = piso (\ frac {3-2 + 2 * 1} {2} + 1) = 2](https://latex.codecogs.com/gif.latex?n_i&space;=&space;3,&space;k&space;=2,&space;s&space;=2,&space;p_i&space;=&space;2&space;-&space;(3%5Cmod&space;2)&space;=&space;1,&space;n_0&space;=&space;int&space;(%5Cfrac%7B3-2+2*1%7D%7B2%7D&space;+&space;1)&space;=&space;2)
Se a direção vertical for tomada (4):
![n_i = 4, k = 2, s = 2, p_i = 2 - 2 = 0, n_0 = piso (\ frac {3-2 + 2 * 0} {2} + 1) = 2](https://latex.codecogs.com/gif.latex?n_i&space;=&space;4,&space;k&space;=2,&space;s&space;=2,&space;p_i&space;=&space;2&space;-&space;2&space;=&space;0,&space;n_0&space;=&space;int&space;(%5Cfrac%7B3-2+2*0%7D%7B2%7D&space;+&space;1)&space;=&space;2)
Espero que isso ajude a entender como realmente o MESMO preenchimento funciona no TF.