卷积自动编码器 - 为什么 keras 示例是不对称模型?

数据挖掘 深度学习 喀拉斯 卷积神经网络 自动编码器
2022-03-07 11:57:17

我正在查看keras卷积自动编码器示例,并与模型结构混淆:

import keras
from keras import layers

input_img = keras.Input(shape=(28, 28, 1))

x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)

# at this point the representation is (4, 4, 8) i.e. 128-dimensional

x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = keras.Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

encoder包含层的最后一层和开头MaxPooling2D层的第一层。decoderConv2D

  1. 为什么不是对称的?我假设如果编码器的最后一层是下采样层,那么解码器的第一层将是上采样层。

  2. 将模型构建为keras发布(而不是使用上采样作为解码器的第一层)有什么优势?

  3. 是否有一些层包含填充而其他不包含的原因?(是不是因为我们想要获得与输入大小相同的输出大小)?

0个回答
没有发现任何回复~