生成对抗网络(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 风格控制 高质量人脸
相关推荐
大C聊AI2 小时前
通用办公 AI 难以适配招投标专业场景,垂直行业 AI 工具落地实践|智标领航技术选型分析
人工智能·效率提升·ai 工具·招投标·智标领航·ai 辅助办公
海天一色y2 小时前
AI Agent的自进化闭环
人工智能
大鱼>2 小时前
超参数调优进阶:Optuna/Bayesian/Early Stopping
人工智能·学习·机器学习·聚类
z小猫不吃鱼2 小时前
02 Optimal Brain Damage 详解:二阶信息剪枝的起点
算法·机器学习·剪枝
VIP_CQCRE2 小时前
OpenAI Chat Completion API 接入指南:用 Ace Data Cloud 快速把 ChatGPT 能力接进业务系统
人工智能·chatgpt·openai·api·acedatacloud
梦想的初衷~2 小时前
【科研自动化实战】Codex × Claude Code × OpenClaw × Hermes:四位AI研究员的科研协作流水线搭建指南
人工智能·codex·claude code·openclaw·科研自动化·agent协作·ai科研助手
m0_626535202 小时前
近似attention
人工智能·算法·机器学习
咖啡屋和酒吧3 小时前
无锡干细胞领域发展纪实
大数据·人工智能
liuyicenysabel3 小时前
多服务上线日记二:
服务器·笔记·学习
weixin_446260853 小时前
AgentsCAD:基于多智能体大模型推理与几何特征识别的FDM增材制造自动化设计
人工智能·自动化·制造