Imbottitura VALIDA : si tratta dell'imbottitura zero. Spero non ci sia confusione.
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)
STESSA imbottitura: questo è un po 'difficile da capire in primo luogo perché dobbiamo considerare due condizioni separatamente come menzionato nei documenti ufficiali .
Prendiamo input as , output as , padding as , stride as e dimensione del kernel as (viene considerata solo una singola dimensione)
Caso 01 ::
Caso 02 ::
è calcolato in modo tale che il valore minimo che può essere preso per l'imbottitura. Poiché il valore di è noto, il valore di può essere trovato utilizzando questa formula .
Facciamo questo esempio:
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)
Qui la dimensione di x è (3,4). Quindi se viene presa la direzione orizzontale (3):
Se viene presa la direzione verticale (4):
Spero che questo possa aiutare a capire come funziona effettivamente l' imbottitura SAME in TF.