python - 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)
解决方案
我想谈谈一般的生成器,而不是你提到的那个。
正如我想在 GAN 中认为的那样,真正发挥作用的不是模型,而是训练过程。理论上,你可以使用任何你喜欢的架构作为你的生成器,你甚至可以使用简单的几层全连接神经网络,所以它不必是一个花哨的 CNN 模型(如 ResNet、VGG 或尽管花哨的模型具有更复杂的表示能力,但您构建的模型)。使生成器学会制作此类图像的原因是其训练过程中的“对抗性”(如果您知道的话,有点像 Minimax 算法)。事实上,生成器经常因为鉴别器生成噪声图像而受到惩罚。所以生成器会尽力创建图像,以便它可以用它得到的反馈(梯度)来欺骗鉴别器。
所以你看,架构选择是(重要的)但不负责赋予它从随机噪声构建图像的能力。
推荐阅读
- typescript - Vue.js - vue-cli-service 服务 - img src 没有从对象正确加载
- c - 静态结构警告空声明中无用的存储类说明符
- scala - 使用 .csv 扩展名在 azure blov 中保存一个空数据框
- angular - Http 调用不会发送 cookie
- wordpress - 无法导入图库的任何图片
- java - JVM 堆使用变化。这个图正常吗?
- google-chrome-extension - 事件处理程序中的错误,类型错误:无法读取未定义的属性“更新”
- c# - Microsoft DependencyInjection 到 Ninject DI
- angular - 安装材料颜色选择器后,ng build 无法正常工作
- mysql - 从 mysql 选择查询中删除行