郭震 AI公众号:郭震AI

9 只生成构建第一个GAN之编写判别器模型

发布日期:

最近更新:

分类: GAN网络从零教程

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点4 个
图文要点6 张
正文规模1.4k 字
只生成构建第一个GAN之编写判别器模型结构图查看大图
只生成构建第一个GAN之编写判别器模型结构图

GAN 的关键是生成器和判别器互相推动,学习时要同时看结构、训练和样本质量。阅读时可以按「判别器模型的结构 -> 判别器的网络结构 -> 判别器的损失函数 -> 训练准备」建立结构,再回到正文里的代码、案例或指标做验证。

只生成构建第一个GAN之编写判别器模型核对图查看大图
只生成构建第一个GAN之编写判别器模型核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「判别器模型的结构」,再查「判别器的网络结构」。

在上一篇中,我们已经成功地构建了第一个GAN的生成器模型。生成器的任务是从随机噪声中生成可以“伪装”成真实数据的样本,而在这一篇中,我们将专注于判别器模型的构建。判别器的作用是判断输入的数据是真实的样本还是由生成器产生的假样本。

判别器模型的结构

判别器可以被视为一个二分类器,它的输入是一个样本(可以是真实样本,也可以是生成样本),输出是一个概率值,表示输入样本为真实样本的可能性。我们通常会使用卷积神经网络(CNN)来构建判别器,特别是在处理图像数据时。

GAN判别器模型判断卡查看大图
GAN判别器模型判断卡

编写 GAN 判别器时,先看输入尺寸、卷积层设计、真假标签、损失函数和梯度反馈。

判别器的网络结构

在构建判别器模型时,可以考虑如下的结构:

  1. 输入层:接收形状为 (高度, 宽度, 通道数) 的图像。
  2. 卷积层:一系列卷积层,用于提取特征。通常会跟随批归一化(Batch Normalization)和激活函数(通常使用Leaky ReLU)。
  3. 全连接层:在特征提取后,接入全连接层用于进行分类。
  4. 输出层:使用Sigmoid激活函数,输出一个0到1之间的值,表示样本为真实的概率。

以下是一个简单的判别器模型的示例(以Keras为例):

import tensorflow as tf
from tensorflow.keras import layers, models

def build_discriminator(img_shape):
    model = models.Sequential()

    # 第一卷积层
    model.add(layers.Conv2D(64, kernel_size=3, strides=2, padding='same', input_shape=img_shape))
    model.add(layers.LeakyReLU(alpha=0.2))
    model.add(layers.Dropout(0.3))

    # 第二卷积层
    model.add(layers.Conv2D(128, kernel_size=3, strides=2, padding='same'))
    model.add(layers.LeakyReLU(alpha=0.2))
    model.add(layers.Dropout(0.3))

    # 第三卷积层
    model.add(layers.Conv2D(256, kernel_size=3, strides=2, padding='same'))
    model.add(layers.LeakyReLU(alpha=0.2))
    model.add(layers.Dropout(0.3))

    # 第四卷积层
    model.add(layers.Conv2D(512, kernel_size=3, strides=2, padding='same'))
    model.add(layers.LeakyReLU(alpha=0.2))
    model.add(layers.Dropout(0.3))

    # 展平层
    model.add(layers.Flatten())
    model.add(layers.Dense(1, activation='sigmoid'))  # 输出层

    return model

# 定义图像形状
img_shape = (64, 64, 3)
discriminator = build_discriminator(img_shape)
discriminator.summary()

在这个示例中,我们定义了一个简单的判别器,输入图像的形状为(64, 64, 3),适合大部分小型图像数据集。我们使用了 LeakyReLU 激活函数来替代常规ReLU,以解决可能出现的“死神经元”问题。

判别器的损失函数

在GAN的训练过程中,判别器的损失函数通常采用二元交叉熵(Binary Cross-Entropy),其计算公式为:

生成对抗网络阅读地图卡查看大图
生成对抗网络阅读地图卡

学《只生成构建第一个GAN之编写判别器模型》时,可以先找一个自己能复现的小场景,再看相关概念和练习步骤,读完后用自己的例子复述一遍。

LossD=Expdata[log(D(x))]Ezpz[log(1D(G(z)))]\text{Loss}_{D} = -\mathbb{E}_{x \sim p_{data}} [\log(D(x))] - \mathbb{E}_{z \sim p_{z}} [\log(1 - D(G(z)))]

其中:

  • D(x)D(x) 表示判别器对真实样本 xx 的预测值。
  • G(z)G(z) 表示生成器生成的样本。
  • pdatap_{data} 是真实数据的分布,pzp_{z} 是随机噪声的分布。

训练准备

在下一篇中,我们将讨论GAN的训练过程以及数据准备和预处理的内容。在这一过程中,我们需要确保判别器与生成器能够交替训练,以达到生成替代真实数据样本的目标。

只生成构建第一个GAN之编写判别器模型应用检查卡查看大图
只生成构建第一个GAN之编写判别器模型应用检查卡

练习《只生成构建第一个GAN之编写判别器模型》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

只生成构建第一个GAN之编写判别器模型应用复盘卡查看大图
只生成构建第一个GAN之编写判别器模型应用复盘卡

复习《只生成构建第一个GAN之编写判别器模型》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

总之,现在我们已经成功编写了判别器模型,为接下来的训练做好了准备。在下一篇中,我们将进一步探讨如何准备数据和进行有效的训练。希望这个判别器模型的示例能够让你对GAN的构建有更深入的理解!

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...