生成对抗网络(GAN)原理与实战

生成对抗网络(GAN)原理与实战

1. GAN 原理

复制代码
GAN 结构:
├── 生成器(Generator):噪声 → 生成图像
├── 判别器(Discriminator):判断图像真假
└── 训练过程:
    ├── 生成器:生成尽可能真实的图像
    └── 判别器:尽可能区分真假图像
    └── 两者博弈,最终达到纳什均衡

2. DCGAN 实现

python 复制代码
import torch
import torch.nn as nn

class Generator(nn.Module):
    def __init__(self, latent_dim=100):
        super().__init__()
        self.main = nn.Sequential(
            nn.ConvTranspose2d(latent_dim, 512, 4, 1, 0, bias=False),
            nn.BatchNorm2d(512),
            nn.ReLU(True),
            nn.ConvTranspose2d(512, 256, 4, 2, 1, bias=False),
            nn.BatchNorm2d(256),
            nn.ReLU(True),
            nn.ConvTranspose2d(256, 128, 4, 2, 1, bias=False),
            nn.BatchNorm2d(128),
            nn.ReLU(True),
            nn.ConvTranspose2d(128, 3, 4, 2, 1, bias=False),
            nn.Tanh()
        )
    
    def forward(self, x):
        return self.main(x)

class Discriminator(nn.Module):
    def __init__(self):
        super().__init__()
        self.main = nn.Sequential(
            nn.Conv2d(3, 64, 4, 2, 1, bias=False),
            nn.LeakyReLU(0.2, inplace=True),
            nn.Conv2d(64, 128, 4, 2, 1, bias=False),
            nn.BatchNorm2d(128),
            nn.LeakyReLU(0.2, inplace=True),
            nn.Conv2d(128, 256, 4, 2, 1, bias=False),
            nn.BatchNorm2d(256),
            nn.LeakyReLU(0.2, inplace=True),
            nn.Conv2d(256, 1, 4, 1, 0, bias=False),
            nn.Sigmoid()
        )
    
    def forward(self, x):
        return self.main(x).view(-1)

3. 训练循环

python 复制代码
criterion = nn.BCELoss()
optimizer_G = torch.optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))

for epoch in range(num_epochs):
    for real_images, _ in dataloader:
        batch_size = real_images.size(0)
        real_labels = torch.ones(batch_size)
        fake_labels = torch.zeros(batch_size)
        
        # 训练判别器
        z = torch.randn(batch_size, 100, 1, 1)
        fake_images = generator(z)
        
        d_loss_real = criterion(discriminator(real_images), real_labels)
        d_loss_fake = criterion(discriminator(fake_images.detach()), fake_labels)
        d_loss = (d_loss_real + d_loss_fake) / 2
        
        optimizer_D.zero_grad()
        d_loss.backward()
        optimizer_D.step()
        
        # 训练生成器
        g_loss = criterion(discriminator(fake_images), real_labels)
        
        optimizer_G.zero_grad()
        g_loss.backward()
        optimizer_G.step()

总结

GAN 变体 特点 应用
DCGAN 卷积架构 图像生成
WGAN Wasserstein 距离 训练稳定
CycleGAN 无配对图像翻译 风格迁移
StyleGAN 风格控制 高质量人脸
相关推荐
lialaka3 分钟前
「原味厨房(The Culinary Lab)」——全语音 3D AI 具身交互智能私人主厨与沉浸式烹饪陪伴交互舱
人工智能·交互
冬奇Lab4 分钟前
AI 评测系列(05):Agent 评测——工具调用准确率与轨迹质量
人工智能·agent
阳光是sunny6 分钟前
LangGraph高级教程:Multi Schema多状态管理详解
前端·人工智能·后端
CHrisFC10 分钟前
环保第三方检测行业LIMS横向对比与选型指南
大数据·人工智能
惊讶的猫19 分钟前
CLGSI
人工智能·算法·机器学习
冬奇Lab21 分钟前
开源项目第167期:Buzz — Block 开源的人机协作工作空间,Agent 是成员不是 Bot
人工智能·开源·agent
生命涌现24 分钟前
生命涌现的小龙虾技能之【Human Pose Recognition Skill | 人体姿态识别技能】简介
人工智能·目标检测·计算机视觉·多模态大模型·openclaw小龙虾技能
funkygroove29 分钟前
ChatGPT Business 包含 Pro 吗?两者区别一次说清
人工智能·chatgpt
神奇霸王龙42 分钟前
Gemini CLI 中转站配置使用教程
人工智能·ai·ai作画·aigc·ai编程·gemini·goolge
stereohomology1 小时前
Kimi K3编程实力远超GLM5.2:一个Trae复赛证据
人工智能·大模型·对比·why不coding