生成对抗网络(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 风格控制 高质量人脸
相关推荐
云和数据.ChenGuang7 分钟前
fastapi的参数剖析
人工智能·深度学习·机器学习·语言模型·状态模式·fastapi
日常筹谋记13 分钟前
技术研究:数据中心HVDC系统直流保护配合与ABB电气产品参数解析
人工智能·创业创新·业界资讯
元岳数字人小元18 分钟前
AI数字人系统赋能场景升级,数字人一体机实现服务提效降本
人工智能
Sammyyyyy26 分钟前
如何在不停项目不停机的情况下切换AI大模型
大数据·人工智能
poiu12346571 小时前
客户沟通音视频素材提炼会议纪要,主流AI工具横向实测对比
人工智能
咖啡星人k1 小时前
想私有化部署 AI 开发平台?MonkeyCode 给出的答案是开源 + 离线
人工智能·大模型·ai编程·monkeycode
NineData1 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
Eloudy1 小时前
LLM agent 分拆任务的能力来源
人工智能·机器学习
circuitsosk1 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
甲维斯1 小时前
美版豆包G3.7Flash,快到飞起,超3分钟算我输!
人工智能