郭震 AI公众号:郭震AI

1 什么是生成对抗网络?

发布日期:

最近更新:

分类: GAN网络从零教程

预计阅读: 4 分钟

阅读次数: 0

系列进度

GAN 网络教程 · 第 1 / 21

预计阅读4 分钟
结构重点4 个
图文要点6 张
正文规模1.5k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 4 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

什么是生成对抗网络?结构图查看大图
什么是生成对抗网络?结构图

GAN 的关键是生成器和判别器互相推动,学习时要同时看结构、训练和样本质量。阅读时可以按「GAN的基本构成 -> GAN的工作原理 -> 案例:MNIST数字生成 -> 生成器」建立结构,再回到正文里的代码、案例或指标做验证。

什么是生成对抗网络?核对图查看大图
什么是生成对抗网络?核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「GAN的基本构成」,再查「GAN的工作原理」。

在当今的深度学习领域,生成对抗网络(GAN, Generative Adversarial Network)作为一种创新性的模型框架,正受到越来越多的关注。GAN的独特之处在于它通过一个“对抗”的过程来进行训练,从而生成高质量的数据样本。此技术的广泛应用涵盖了图像生成、语音合成、视频预测等多个领域。

GAN的基本构成

生成对抗网络由两个主要组成部分构成:

GAN学习判断卡查看大图
GAN学习判断卡

GAN 的直觉来自生成器和判别器的相互推动。先理解这组关系,再看损失函数和训练技巧,很多不稳定现象会更容易解释。

  1. 生成器(Generator):这个模型的目标是生成“假”的数据样本,试图欺骗鉴别器。生成器接受随机噪声作为输入,经过学习后能够生成与真实样本相似的数据。

  2. 鉴别器(Discriminator):鉴别器的任务是区分输入的样本是真实样本(来自训练数据集)还是生成的样本(来自生成器)。鉴别器输出一个概率值,表示样本为真实样本的可能性。

该模型的训练过程涉及两个网络之间的“博弈”,生成器不断提高其生成能力以欺骗鉴别器,而鉴别器则不断提升其辨别能力以识别生成样本。

GAN的工作原理

在训练初期,生成器可能生成的样本质量很低。在此阶段,鉴别器能够轻松地区分真实和生成样本。然而,随着训练的进行,生成器的能力逐渐增强,生成的样本越来越接近真实样本。训练过程可以用以下损失函数来描述:

生成对抗网络学习重点卡查看大图
生成对抗网络学习重点卡

《什么是生成对抗网络?》可以按“场景、概念、动作、结果”来读。先把这四件事对齐,再回到正文里的参数、代码或流程。

  • 生成器损失函数:
LG=Ezp(z)[log(D(G(z)))]L_G = -\mathbb{E}_{z \sim p(z)}[\log(D(G(z)))]
  • 鉴别器损失函数:
LD=Expdata(x)[log(D(x))]Ezp(z)[log(1D(G(z)))]L_D = -\mathbb{E}_{x \sim p_{data}(x)}[\log(D(x))] - \mathbb{E}_{z \sim p(z)}[\log(1 - D(G(z)))]

其中,D(x)D(x)是鉴别器对样本xx判断为真实的概率,G(z)G(z)是生成器生成的样本。

案例:MNIST数字生成

为了更好地理解GAN的工作原理,我们可以简单实现一个生成对抗网络,以生成手写数字(MNIST数据集)为例。以下是一个使用TensorFlowKeras实现的基本GAN:

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

# 定义生成器模型
def build_generator():
    model = keras.Sequential()
    model.add(layers.Dense(128, activation='relu', input_dim=100))
    model.add(layers.Dense(784, activation='sigmoid'))
    model.add(layers.Reshape((28, 28, 1)))  # 形状为28x28的图像
    return model

# 定义鉴别器模型
def build_discriminator():
    model = keras.Sequential()
    model.add(layers.Flatten(input_shape=(28, 28, 1)))
    model.add(layers.Dense(128, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))  # 输出一个0到1之间的概率值
    return model

# 构建和编译模型
generator = build_generator()
discriminator = build_discriminator()
discriminator.compile(optimizer='adam', loss='binary_crossentropy')

# GAN模型
discriminator.trainable = False
gan_input = layers.Input(shape=(100,))
generated_image = generator(gan_input)
gan_output = discriminator(generated_image)
gan = keras.Model(gan_input, gan_output)
gan.compile(optimizer='adam', loss='binary_crossentropy')

在这个案例中,我们定义了一个简单的生成器和鉴别器,目标是生成28x28的手写数字图像。通过不断迭代训练生成器和鉴别器,可以生成与MNIST数据集相似的数字。

什么是生成对抗网络?应用复盘卡查看大图
什么是生成对抗网络?应用复盘卡

复习《什么是生成对抗网络?》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

什么是生成对抗网络?应用检查卡查看大图
什么是生成对抗网络?应用检查卡

练习《什么是生成对抗网络?》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

小结

生成对抗网络(GAN)通过对抗博弈的方式在生成和鉴别的过程中实现了数据的生成,极大地推动了计算机视觉等领域的发展。随着深度学习技术的进步,GAN的应用场景也日趋广泛,如图像修复、图像生成、风格迁移等。

下一篇文章将探讨生成对抗网络的历史背景,帮助我们更好地理解GAN的产生和发展过程。这将为深入学习GAN的各种变体和应用奠定基础。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

什么是生成对抗网络?适合谁读?

这是 GAN 网络教程 系列第 1 / 21 篇,适合正在学习GAN 网络教程,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇GAN 网络教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

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

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

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

最多 800 字

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

0/800

留言列表

0
正在加载留言...