用于构建自动编码器的 keras.Flatten 的倒数
Inverse of keras.Flatten for building autoencoder
我的目标是构建一个卷积自动编码器,将输入图像编码为大小为 (10,1)
的平面向量。我遵循了 keras documentation 的示例并根据我的目的对其进行了修改。不幸的是,模型是这样的:
input_img = Input(shape=(28, 28, 1))
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Flatten()(x)
encoded = Dense(units = 10, activation = 'relu')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
给我
ValueError: Input 0 is incompatible with layer conv2d_39: expected ndim=4, found ndim=2
我想我应该在我的解码器中添加一些层来反转 Flatten 的效果,但不确定是哪一层。你能帮忙吗?
为什么你想要向量的特定形状 (10,1)?
然后你试图用大小为 3x3 的内核对其进行卷积,这实际上没有意义。
卷积层的形状有高度、宽度和通道。必须重塑密集层的输出,这可以通过重塑层来完成。
然后您可以将其重塑为例如 5x2 单通道。
encoded = Reshape((5, 2, 1))(encoded)
我的目标是构建一个卷积自动编码器,将输入图像编码为大小为 (10,1)
的平面向量。我遵循了 keras documentation 的示例并根据我的目的对其进行了修改。不幸的是,模型是这样的:
input_img = Input(shape=(28, 28, 1))
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Flatten()(x)
encoded = Dense(units = 10, activation = 'relu')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
给我
ValueError: Input 0 is incompatible with layer conv2d_39: expected ndim=4, found ndim=2
我想我应该在我的解码器中添加一些层来反转 Flatten 的效果,但不确定是哪一层。你能帮忙吗?
为什么你想要向量的特定形状 (10,1)? 然后你试图用大小为 3x3 的内核对其进行卷积,这实际上没有意义。
卷积层的形状有高度、宽度和通道。必须重塑密集层的输出,这可以通过重塑层来完成。 然后您可以将其重塑为例如 5x2 单通道。
encoded = Reshape((5, 2, 1))(encoded)