【问题标题】:Changing Conv2dTranspose Output Shape更改 Conv2dTranspose 输出形状
【发布时间】:2021-04-21 12:59:01
【问题描述】:

我正在使用 convd2d 和 conv2dtranspose 创建一个 CVAE。使用 conv2dtranspose 时,我无法复制编码器,因为形状尺寸是奇数而不是偶数。我已经搜索了如何做到这一点,但我找不到任何有用的东西。我已经添加和删除了不同的步长,并调整了填充,但是它不起作用。我在下面附上了编码器和解码器,以及它们各自的模型摘要。主要问题是在 conv2d_transpose1 中,输出形状应该是 (None, 64, 4, 32),而应该是 (None, 64, 3, 32)

    self.latent_dim = 6
    self.encoder = tf.keras.Sequential(
        [
            tf.keras.layers.InputLayer(input_shape=input_shape),
            tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=(1, 1), activation='relu', padding='same'),
            tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=(2, 2), activation='relu', padding='same'),
            tf.keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2, 2), activation='relu', padding='same'),
            tf.keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2, 2), activation='relu', padding='same'),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(64, activation='relu'),
            # No activation
            tf.keras.layers.Dense(latent_dim + latent_dim),

        ]
    )


    self.decoder = tf.keras.Sequential(
        [
            tf.keras.layers.InputLayer(input_shape=(latent_dim,)),
            tf.keras.layers.Dense(units=16 * 1 * 64, activation=tf.nn.relu),
            tf.keras.layers.Reshape(target_shape=(16, 1, 64)),
            tf.keras.layers.Conv2DTranspose(filters=64, kernel_size=3, strides=2, padding='same', activation='relu'),
            tf.keras.layers.Conv2DTranspose(filters=32, kernel_size=3, strides=2, padding='same', activation='relu',),
            # No activation
            tf.keras.layers.Conv2DTranspose(filters=32, kernel_size=3, strides=2, padding='same', activation='relu'),
            tf.keras.layers.Conv2D(filters=1, kernel_size=3, strides=(1, 1), padding='same'),
        ]
    )

    Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 128, 6, 32)        320       
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 64, 3, 32)         9248      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 32, 2, 64)         18496     
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 16, 1, 64)         36928     
_________________________________________________________________
flatten (Flatten)            (None, 1024)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                65600     
_________________________________________________________________
dense_1 (Dense)              (None, 12)                780       
=================================================================
Total params: 131,372
Trainable params: 131,372
Non-trainable params: 0
_________________________________________________________________
None
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_2 (Dense)              (None, 1024)              7168      
_________________________________________________________________
reshape (Reshape)            (None, 16, 1, 64)         0         
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 32, 2, 64)         36928     
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 64, 4, 32)         18464     
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 128, 8, 32)        9248      
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 128, 8, 1)         289       
=================================================================
Total params: 72,097
Trainable params: 72,097
Non-trainable params: 0
_________________________________________________________________

【问题讨论】:

    标签: python tensorflow machine-learning keras autoencoder


    【解决方案1】:

    步幅为 2 的 Conv2DTranspose 将前两个维度加倍,因此 (None, 32, 2, 32) 的输入产生和输出形状 (None, 64, 4, 32) 而不是 (None, 64, 3, 32)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 2021-06-05
      • 2020-08-11
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多