生成对抗网络(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 风格控制 高质量人脸
相关推荐
跨境卫士苏苏3 分钟前
TikTokShop关联账户认定指引更新跨境代运营团队需要注意哪些管理责任
大数据·人工智能·市场营销·跨境电商·营销策略
SelectDB6 分钟前
Apache Doris 企业版怎么选?SelectDB 提供同源商业支持、私有化部署与信创适配
人工智能
乐维_lwops11 分钟前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
杨杨杨大侠38 分钟前
AI 怎么知道自己改对了?从 Astra 修千问说到 Harness²
人工智能·agent
tellmewhoisi41 分钟前
深度学习39:RNN基础介绍,api参数解惑和代码api
人工智能·rnn·深度学习
金融Tech趋势派1 小时前
企业微信客户管理工具哪个好?按企业规模、行业与合规要求的三层判断标准
人工智能·企业微信
组工部管理能手李哥1 小时前
一次政务知识库体验:AI回答之外,我更在意那行引用来源
大数据·人工智能·大模型·政务
硅谷秋水1 小时前
AgenticRoboRL:将“编程智能体”后训练引入智能体化机器人领域
人工智能·机器学习·语言模型·机器人
武天旭1 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
wordbaby2 小时前
构建高效的智能体(Building Effective Agents)— Anthropic 官方全文精译与图解
人工智能