生成对抗网络(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 风格控制 高质量人脸
相关推荐
龙亘川39 分钟前
智赋能文旅领域治理|一网统管能做什么?文化服务管理系统四大场景拆解
大数据·人工智能
指针常量41 分钟前
【RL相关笔记】RL 效率综述
人工智能·笔记·大语言模型·后训练
番茄不是西红柿kk42 分钟前
OpenCode Go 与 Command Code 性价比深度分析(2026.09.04 更新)
人工智能·opencode·commondcode
留白_1 小时前
【tableau入门学习】2、柱状图、折线图、饼图、散点图
学习·tableau
Carl_奕然1 小时前
【智能体】Agent的四种设计模式之:React(2026最新版)
javascript·人工智能·python·react.js·设计模式·语言模型
Thomas.Sir1 小时前
第24课:TensorFlow|图像分类实战训练【手写数字、日常图像分类完整项目】
人工智能·分类·tensorflow
AI视觉网奇1 小时前
blende 下载安装学习笔记
笔记·学习
传奇开心果编程1 小时前
【Rust入门知识点学与练】第9课:Vec 动态数组
开发语言·学习·rust
Herlie1 小时前
2026,当AI不再是“玩具”:01Agent如何终结内容创作的“碎片化时代”?
人工智能