0

我正在关注这个 Kaggle Notebook,该人已经为 CELEB-A 数据集实现了生成器函数,如下所示,它运行良好。在这里,他使用(128,(5,5)了 CELEB-A 数据集上 DCGAN 的第一个 Conv2DTranspose() 函数的生成器函数的过滤器大小。

但我没有得到的是 - 对于其他一些随机图像形状,例如,如果我有一个形状的彩色图像,比如 256 * 540 * 3 - 我如何准确地决定 DCGAN 中第一个 Conv2DTranspose() 函数的过滤器大小生成器函数。


def make_generator():
    model = tf.keras.Sequential()
    
    # Random noise to 16x16x256 image
    model.add(layers.Dense(16*16*256,use_bias=False,input_shape=(100,)))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())
    model.add(layers.Reshape((16,16,256)))
    
    assert model.output_shape == (None,16,16,256)
    
    model.add(layers.Conv2DTranspose(128,(5,5),strides=(2,2),use_bias=False,padding="same",kernel_initializer=WEIGHT_INIT))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())
    
    assert model.output_shape == (None,32,32,128)
    
    model.add(layers.Conv2DTranspose(128,(5,5),strides=(2,2),use_bias=False,padding="same",kernel_initializer=WEIGHT_INIT))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())
    
    assert model.output_shape == (None,64,64,128)
    
    model.add(layers.Conv2DTranspose(64,(5,5),strides=(2,2),use_bias=False,padding="same",kernel_initializer=WEIGHT_INIT))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())
    
    assert model.output_shape == (None,128,128,64)
    
    model.add(layers.Conv2DTranspose(3,(5,5),strides=(2,2),use_bias=False,padding="same",kernel_initializer=WEIGHT_INIT,
                                     activation="tanh"
                                    ))
              # Tanh activation function compress values between -1 and 1. 
              # This is why we compressed our images between -1 and 1 in readImage function.
    assert model.output_shape == (None,256,256,3)
    return model

我知道在 DCGAN 中,对于生成器功能,我必须从以种子(大小为 100 的噪声向量)作为输入的 Dense 层开始,然后多次上采样,直到达到所需的图像大小。

但是在通过一些示例之后,我只是没有具体说明,在决定 DCGAN 的 Generator 函数中的 1st Conv2DTranspose() 函数的 Filter Size 时要遵循什么样的规则或原则。

4

0 回答 0