Rembourrage VALIDE : c'est avec un remplissage nul. J'espère qu'il n'y a pas de confusion.
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)
MÊME rembourrage: c'est un peu délicat à comprendre en premier lieu car nous devons considérer deux conditions séparément, comme mentionné dans les documents officiels .
Prenons entrée as , sortie as , padding as , stride as et kernel size as (une seule dimension est prise en compte)
Cas 01 ::
Cas 02 ::
est calculé de telle sorte que la valeur minimale qui peut être prise pour le rembourrage. Puisque la valeur de est connue, la valeur de peut être trouvée en utilisant cette formule .
Voyons cet exemple:
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)
Ici, la dimension de x est (3,4). Alors si la direction horizontale est prise (3):
Si la direction verticale est prise (4):
J'espère que cela vous aidera à comprendre comment fonctionne réellement le même rembourrage dans TF.