【问题标题】:How to resize input size for Conv1DTranspose layer in Keras?如何在 Keras 中调整 Conv1DTranspose 层的输入大小?
【发布时间】:2020-10-12 14:14:56
【问题描述】:

我正在使用 Keras 构建基于 Conv1DTranspose 层的 GAN。我想实现一个 GAN 模型(尤其是生成器)。但是,我无法做出正确的架构。你能帮我解决这些问题吗:

(1) 问题是我的输入(噪声)的大小与 Keras 文档不匹配。所以,我无法从一开始就建立网络。

(2)如何从Conv1DTranspose层输出到Conv1D层“reshape”?

谢谢你,

我想要复制的生成器架构:

这是我的代码:

# define generator model
def define_generator(latent_dim, n_outputs=1):
    model = Sequential()

    # reshape layer
    model.add(Dense(1 * 10 * 10, activation="relu", input_dim=(latent_dim)))
    model.add(Reshape((10, 10, 1)))

    # 1D Transposed Convolutional Layer
    model.add(Conv1DTranspose(filters=32, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))

    model.add(Conv1DTranspose(filters=64, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))

    model.add(Conv1DTranspose(filters=128, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))

    # 1D Convolutional Layer
    model.add(Conv1D(filters=128, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))

    model.add(Conv1D(filters=64, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))

    model.add(Conv1D(filters=32, kernel_size=4, strides=1))
    model.add(BatchNormalization(momentum=0.8))
    model.add(LeakyReLU(alpha=0.1))
    
    # output layer
    model.add(Dense(n_outputs, activation='sigmoid'))

    print('Generator')
    model.summary()

    return model

错误信息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-70-a8709ad0f7a6> in <module>()
      1 latent_dim = 100
      2 
----> 3 generator = define_generator(latent_dim)

6 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/convolutional.py in build(self, input_shape)
    944     if len(input_shape) != 3:
    945       raise ValueError('Inputs should have rank 3. Received input shape: ' +
--> 946                        str(input_shape))
    947     channel_axis = self._get_channel_axis()
    948     if input_shape.dims[channel_axis].value is None:

ValueError: Inputs should have rank 3. Received input shape: (None, 10, 10, 1)

【问题讨论】:

    标签: python keras generative-adversarial-network


    【解决方案1】:

    Conv1DTranspose 返回一个形状为 (None, 10, 10, 1) 的张量,因此在 1D 卷积层之前尝试添加一个 Reshape 层以将其压缩回具有适当形状的 3D 张量

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 2020-02-09
      • 2023-03-28
      • 1970-01-01
      • 2019-04-23
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多