WAŻNE wypełnienie: jest to wypełnienie zerowe. Mam nadzieję, że nie ma zamieszania.
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)
SAME wypełnienie: Jest to trochę trudne do zrozumienia w pierwszej kolejności, ponieważ musimy rozważyć dwa warunki oddzielnie, jak wspomniano w oficjalnych dokumentach .
Weźmy dane wejściowe jako , dane wyjściowe jako , wypełnienie jako , krok jako i rozmiar jądra jako (rozważany jest tylko jeden wymiar)
Przypadek 01 :
Przypadek 02 :
oblicza się w taki sposób, aby minimalną wartość, jaką można przyjąć dla wypełnienia. Ponieważ wartość jest znana, wartość można znaleźć za pomocą tego wzoru .
Opracujmy ten przykład:
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)
Tutaj wymiar x wynosi (3,4). Następnie, jeśli zostanie przyjęty kierunek poziomy (3):
Jeśli zostanie wybrany kierunek pionowy (4):
Mam nadzieję, że pomoże to zrozumieć, w jaki sposób SAME wypełnienie działa w TF.