【生成对抗网络】

生成对抗网络 (Generative Adversarial Networks,简称GANs)是深度学习领域的一种创新结构,由Ian Goodfellow在2014年首次提出。GANs包括两个深度神经网络------一个生成器和一个判别器,它们通常以对抗的方式进行训练。

以下是GANs的基本概念:
生成器 (Generator): 生成器的任务是从随机噪声中生成尽可能真实的数据。换句话说,生成器尝试产生与真实数据集非常相似的新数据。
判别器 (Discriminator): 判别器的任务是区分其接收到的数据是来自真实数据集还是生成器。换句话说,它尝试判断输入数据是真实的还是假的。
训练过程 : 在GANs的训练过程中,生成器和判别器在一个对抗游戏中进行竞争。生成器努力产生越来越真实的数据,以欺骗判别器,而判别器努力变得越来越好地识别真实与生成的数据。这种对抗过程导致生成器产生高质量的数据。
损失函数 : GANs通常使用两个损失函数来评估生成器和判别器的性能。判别器的损失函数评估其正确区分真实数据和生成数据的能力,而生成器的损失函数评估其生成数据欺骗判别器的能力。

GANs在许多应用中都非常有用,如图像生成、图像超分辨率、风格迁移、数据增强和更多其他应用。然而,它们也有一些挑战,例如训练不稳定性、模式崩溃等问题,但随着研究的深入,已经发展了许多变种和技术来解决这些问题。

使用Pytorch在MNIST数据集上写了一个最简单的生成对抗网络,整个训练过程的目的是使生成器和判别器在一个动态的竞技环境中进化。判别器的目标是尽可能地区分真实图像和假图像,而生成器的目标是尽可能地生成能够骗过判别器的图像。
训练判别器 :它在真实图像上进行训练,试图将其标记为真实的,同时在假图像上进行训练,试图将其标记为假的。
训练生成器 :它尝试生成图像,这些图像应当被判别器标记为真实的。

这种竞争性的环境确保了两者都在进步。当GAN训练得当时,生成器应当能够生成非常逼真的图像,而判别器则变得非常擅长于区分真假。

最后,值得注意的是,在训练过程中,GAN可能会遇到一些问题,如模式崩溃,其中生成器可能会始终生成相同的图像。有许多技术和变体,

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd.variable import Variable

# 定义超参数
batch_size = 128
learning_rate = 0.0002
epochs = 10
latent_dim = 100

# 数据加载器
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
mnist = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
dataloader = torch.utils.data.DataLoader(mnist, batch_size=batch_size, shuffle=True)

# 判别器
class Discriminator(nn.Module):
    def __init__(self):
        super(Discriminator, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784, 256),
            nn.LeakyReLU(0.2),
            nn.Linear(256, 128),
            nn.LeakyReLU(0.2),
            nn.Linear(128, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
        x = x.view(x.size(0), 784)
        return self.model(x)

# 生成器
class Generator(nn.Module):
    def __init__(self):
        super(Generator, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(latent_dim, 128),
            nn.ReLU(),
            nn.Linear(128, 256),
            nn.ReLU(),
            nn.Linear(256, 784),
            nn.Tanh()
        )

    def forward(self, z):
        return self.model(z).view(-1, 1, 28, 28)

D = Discriminator()
G = Generator()

criterion = nn.BCELoss()
d_optimizer = optim.Adam(D.parameters(), lr=learning_rate)
g_optimizer = optim.Adam(G.parameters(), lr=learning_rate)

for epoch in range(epochs):
    for batch_idx, (real_images, _) in enumerate(dataloader):
        batch_size = real_images.size(0)
        
        # 训练判别器
        D.zero_grad()
        
        labels = torch.ones(batch_size, 1)
        outputs = D(real_images)
        real_loss = criterion(outputs, labels)
        real_loss.backward()

        z = torch.randn(batch_size, latent_dim)
        fake_images = G(z)
        labels = torch.zeros(batch_size, 1)
        outputs = D(fake_images.detach())
        fake_loss = criterion(outputs, labels)
        fake_loss.backward()
        
        d_optimizer.step()

        # 训练生成器
        G.zero_grad()

        labels

针对MNIST数据集,生成对抗网络(GAN)中的生成器和判别器具有特定的目标和功能。
生成器:

  • 目标:生成器的目标是创建与MNIST数据集中的真实手写数字图像尽可能相似的图像。
  • 功能:它接受一个随机噪声向量(通常是从某种分布,如正态分布中抽取的)作为输入,并将其映射到一个图像空间,生成一个手写数字图像。
  • 训练过程中的角色 :在GAN的训练过程中,生成器试图不断改进其生成的图像,使其更难以被判别器区分为假的。
    判别器:
  • 目标 :判别器的目标是区分接收到的图像是真实的MNIST手写数字图像还是生成器生成的假图像。
    功能 :它接受一个图像作为输入,并输出一个概率值,表示该图像是真实的MNIST图像的概率。
    训练过程中的角色 :在GAN的训练过程中,判别器不断地被训练,以更好地区分真实图像和生成图像。
    总之,针对MNIST数据集,生成器尝试生成与真实MNIST手写数字尽可能相似的图像,而判别器的任务是判断图像是否是真实的MNIST手写数字图像。在这个"游戏"中,生成器和判别器相互对抗,随着训练的进行,两者都变得更加熟练,直到生成器生成的图像与真实图像几乎无法区分。
相关推荐
万岳科技程序员小金18 分钟前
餐饮、跑腿、零售多场景下的同城外卖系统源码扩展方案
人工智能·小程序·软件开发·app开发·同城外卖系统源码·外卖小程序·外卖app开发
桐果云22 分钟前
解锁桐果云零代码数据平台能力矩阵——赋能零售行业数字化转型新动能
大数据·人工智能·矩阵·数据挖掘·数据分析·零售
二向箔reverse2 小时前
深度学习中的学习率优化策略详解
人工智能·深度学习·学习
幂简集成2 小时前
基于 GPT-OSS 的在线编程课 AI 助教追问式对话 API 开发全记录
人工智能·gpt·gpt-oss
AI浩2 小时前
【面试题】介绍一下BERT和GPT的训练方式区别?
人工智能·gpt·bert
Ronin-Lotus2 小时前
深度学习篇---SENet网络结构
人工智能·深度学习
n12352353 小时前
AI IDE+AI 辅助编程,真能让程序员 “告别 996” 吗?
ide·人工智能
漠缠3 小时前
Android AI客户端开发(语音与大模型部署)面试题大全
android·人工智能
连合机器人3 小时前
当有鹿机器人读懂城市呼吸的韵律——具身智能如何重构户外清洁生态
人工智能·ai·设备租赁·连合直租·智能清洁专家·有鹿巡扫机器人
良策金宝AI3 小时前
当电力设计遇上AI:良策金宝AI如何重构行业效率边界?
人工智能·光伏·电力工程