首页 > 解决方案 > GAN 中的生成器是如何工作的?

问题描述

我试图了解 GAN 是如何工作的,在这样做的同时,我被困在生成器网络如何能够从随机噪声输入中生成图像,有人可以向我解释每一行如何影响最终结果(即来自一个随机向量),尤其是最后三行!

def build_generator():
    model = Sequential()
    model.add(Dense(128 * 7 * 7, activation="relu", input_dim=latent_dim))
    model.add(Reshape((7, 7, 128)))
    model.add(UpSampling2D())                                    #inverse of MaxPooling
    model.add(Conv2D(128, kernel_size=3, padding="same"))
    model.add(BatchNormalization(momentum=0.8))
    model.add(Activation("relu"))
    model.add(UpSampling2D())
    model.add(Conv2D(64, kernel_size=3, padding="same"))
    model.add(BatchNormalization(momentum=0.8))
    model.add(Activation("relu"))
    model.add(Conv2D(channels, kernel_size=3, padding="same"))
    model.add(Activation("tanh"))

    model.summary()

    noise = Input(shape=(latent_dim,))
    img = model(noise)

    return Model(noise, img)

标签: pythonkerasgenerative-adversarial-network

解决方案


我想谈谈一般的生成器,而不是你提到的那个。

正如我想在 GAN 中认为的那样,真正发挥作用的不是模型,而是训练过程。理论上,你可以使用任何你喜欢的架构作为你的生成器,你甚至可以使用简单的几层全连接神经网络,所以它不必是一个花哨的 CNN 模型(如 ResNet、VGG 或尽管花哨的模型具有更复杂的表示能力,但您构建的模型)。使生成器学会制作此类图像的原因是其训练过程中的“对抗性”(如果您知道的话,有点像 Minimax 算法)。事实上,生成器经常因为鉴别器生成噪声图像而受到惩罚。所以生成器会尽力创建图像,以便它可以用它得到的反馈(梯度)来欺骗鉴别器。

这是我训练的一个简单的 GAN 模型: GAN模型

所以你看,架构选择是(重要的)但不负责赋予它从随机噪声构建图像的能力。


推荐阅读