Keras/Conv2D: Странно, я использую заполнение=ТО ЖЕ САМОЕ, но размер все равно уменьшен

#python #tensorflow #keras

Вопрос:

Я установил заполнение на ТО ЖЕ или то же самое, но выход все равно уменьшается, что тогда не так? 😅, как я понимаю, согласно официальному документу, размер вывода должен быть таким же, как и размер ввода, я забыл, что важно?

 import tensorflow as tf

x = tf.keras.Input([120, 120, 3])

conv = tf.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), strides=(2, 2), padding="SAME")(x)
conv = tf.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), strides=(2, 2), padding="SAME")(conv)

model = tf.keras.Model(inputs=[x], outputs=[conv])

model.summary()

image_batch = tf.random.normal(shape=[10, 120, 120, 3])
y_pred = model(image_batch)
print(y_pred.shape)
 

Выход

 odel: "model_7"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_8 (InputLayer)         [(None, 120, 120, 3)]     0         
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 60, 60, 3)         84        
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 30, 30, 3)         84        
=================================================================
Total params: 168
Trainable params: 168
Non-trainable params: 0
_________________________________________________________________
(10, 30, 30, 3)
 

Комментарии:

1. Да, вы забыли о шагах.

2. @NanoBit Почему бы и нет? это выглядит правильно, он вводит данные на первый уровень conv.

3. @NanoBit То, что ты написал, не имело для меня никакого смысла.

Ответ №1:

Это из-за strides=(2, 2) . Он пропускает шаг во время операции свертки и, таким образом, уменьшает h amp; w в 2 раза на каждом сверточном слое. введите описание изображения здесь

Если вы установите strides=(1, 1) его, он будет иметь ту же выходную форму.

Комментарии:

1. спасибо @Николас Жерве, и это означает, что заполнение=»то же самое» несовместимо, по крайней мере, это не «то же самое», что описывает? Или я пропустил некоторые уведомления из официального документа?

2. «действительный» означает отсутствие заполнения. «то же самое» приводит к заполнению нулями равномерно слева/справа или вверх/вниз от входных данных, так что выходные данные имеют тот же размер высоты/ширины, что и входные данные.

3. padding="SAME" не будет корректировать эффект шагов