Я работаю над автоэнкодером, и у меня проблема с воспроизведением ввода того же размера. Если я использую операцию транспонированной свертки / деконволюции с теми же параметрами, у меня будет другой размер вывода, чем у исходного ввода. Для иллюстрации моей проблемы предположим, что наша модель состоит только из одной свертки (для кодирования ввода) и одной деконволюции (для декодирования закодированного ввода). Однако я не получил того же размера, что и введенный. Точнее, второе и третье измерение / ось 1 и ось 2 равны 16, а не так, как можно было бы ожидать: 15. Вот код:
import tensorflow as tf
input = tf.keras.Input(shape=(15, 15, 3), name="Input0")
conv2d_layer2 = tf.keras.layers.Conv2D(filters=32, strides=[2, 2], kernel_size=[3, 3],
padding='same',
activation='selu', name="Conv1")
conv2d_trans_layer2 = tf.keras.layers.Conv2DTranspose(filters=32, strides=[2, 2],
kernel_size=[3, 3], padding='same',
activation='selu', name="DeConv1")
x_endcoded_1 = conv2d_layer2(input)
x_reconstructed = conv2d_trans_layer2(x_endcoded_1)
model = tf.keras.Model(inputs=input, outputs=x_reconstructed)
Результаты в следующей модели:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
Input0 (InputLayer) [(None, 15, 15, 3)] 0
_________________________________________________________________
Conv1 (Conv2D) (None, 8, 8, 32) 896
_________________________________________________________________
DeConv1 (Conv2DTranspose) (None, 16, 16, 32) 9248
=================================================================
Total params: 10,144
Trainable params: 10,144
Как я могу воспроизвести свой исходный ввод, используя только эту транспонированную свертку? Это возможно?