我正在关注这个 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 时要遵循什么样的规则或原则。