我在使用Keras的卷积自动编码器的编码器中遇到了Conv 2D层的输出形状问题。编码器的输出形状出乎意料,例如(None,50,28,1)而不是预期的(None,28,28,50)。
下面是我的代码的简化版本:
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D
from tensorflow.keras.models import Model
import numpy as np
def build_encoder(input_shape):
encoder_input = Input(shape=input_shape)
x = Conv2D(filters=50, kernel_size=(3, 3), activation='relu', padding='same')(encoder_input)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
encoder = Model(encoder_input, encoded)
return encoder
# ... other code ...
# Input image shape
input_shape = (28, 28, 1)
# Build the autoencoder
autoencoder, encoder, decoder = build_autoencoder(input_shape)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
autoencoder.fit(train_dataset, train_dataset, epochs=10, batch_size=32, shuffle=True)
当我在编码过程中打印形状时,我看到:
(None, 50, 28, 1)
(None, 50, 14, 1)
(None, 16, 14, 1)
(None, 16, 7, 1)
我希望在第一个Conv 2D层之后输出的形状是(None,28,28,50)。我使用(28,28,1)图像作为输入。有人能帮助我理解为什么Conv 2D层的filters参数似乎会像这样影响输出形状吗?如何实现预期的输出形状(None,28,28,50)?
任何见解或建议将不胜感激!
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 28, 28, 1)] 0
conv2d (Conv2D) (None, 50, 28, 1) 12650
max_pooling2d (MaxPooling2D (None, 50, 14, 1) 0
)
conv2d_1 (Conv2D) (None, 16, 14, 1) 7216
max_pooling2d_1 (MaxPooling (None, 16, 7, 1) 0
2D)
=================================================================
Total params: 19,866
Trainable params: 19,866
Non-trainable params: 0
1条答案
按热度按时间ocebsuys1#
你好,欢迎来到社区。可能下面的片段会有所帮助。