我试图理解对抗生成网络是如何工作的:我在Fran ois Chollet (用Python进行深度学习)的书中找到了一个例子,其中有一个使用CIFAR10数据集的GAN示例,它使用的是包含32x32 RGB图像的“青蛙”类。
我不明白为什么:
接下来,运行另一个Conv2DTranspose,然后运行另一个3 Conv2d。为什么?!
最后,我有一个32×32 1通道的特征图.
from keras import layers
import numpy as np
latent_dim = 32
height = 32
width = 32
channels = 3
generator_input = keras.Input(shape=(latent_dim,))
(1)
x = layers.Dense(128 * 16 * 16)(generator_input)
x = layers.LeakyReLU()(x)
x = layers.Reshape((16, 16, 128))(x)
(2)
x = layers.Conv2D(256, 5, padding='same')(x)
x = layers.LeakyReLU()(x)
x = layers.Conv2DTranspose(256, 4, strides=2, padding='same')(x)
x = layers.LeakyReLU()(x)
x = layers.Conv2D(256, 5, padding='same')(x)
x = layers.LeakyReLU()(x)
x = layers.Conv2D(256, 5, padding='same')(x)
x = layers.LeakyReLU()(x)
x = layers.Conv2D(channels, 7, activation='tanh', padding='same')(x)
generator = keras.models.Model(generator_input, x)
generator.summary()发布于 2019-05-31 19:36:06
1)这是一个任意的选择,你可以为稠密层选择任意数量的通道。
选择16x16是因为将2的步幅设置为Conv2DTranspose,并且您希望提高宽度和高度,以获得32x32的输出。
利用步长来影响卷积层的输出尺寸。在正常卷积中,输出以与大步相同的因子进行下采样,而在换位卷积中,输出以与大步相同的因子进行采样。
例如,您可以将第一层输出更改为8x8x128,然后在Conv2DTranspose中使用4的步幅,这样就可以在维度方面获得相同的结果。
还请记住,正如Fran ois Chollet在他的书中所指出的,当使用跨步转置卷积时,为了避免由于像素空间覆盖不均匀而造成的棋盘伪像,内核大小应该被其跨步次数所整除。
2)在Conv2D或Conv2DTranspose中设置的第一个参数是卷积层产生的滤波器数目。
如前所述,步幅Conv2DTranspose被精确地用于以等于步数的因子来增加宽度和高度。
另外3个Conv2D也是任意的,您应该通过实验和微调模型来确定它们。
https://stackoverflow.com/questions/56392367
复制相似问题