Relleno VÁLIDO : esto es con relleno cero. Espero que no haya confusión.
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)
El mismo relleno: es un poco difícil de entender en primer lugar porque tenemos que considerar dos condiciones por separado como se menciona en los documentos oficiales .
Tomemos input as
, output as
, padding as
, stride as
y kernel size as
(solo se considera una sola dimensión)
Caso 01
::)
Caso 02
::),&space;0))
se calcula de tal manera que el valor mínimo que se puede tomar para el relleno. Como
se conoce el valor de,
se puede encontrar el valor de utilizando esta fórmula
.
Analicemos este ejemplo:
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)
Aquí la dimensión de x es (3,4). Entonces, si se toma la dirección horizontal (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)
Si se toma la dirección vertical (4):
&space;=&space;2)
Espero que esto ayude a comprender cómo funciona realmente el mismo relleno en TF.