Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python实现深度学习模型:生成对抗网络(GAN)

使用Python实现深度学习模型:生成对抗网络(GAN)

作者头像
Echo_Wish
发布于 2024-05-25 11:47:31
发布于 2024-05-25 11:47:31
65502
代码可运行
举报
运行总次数:2
代码可运行

生成对抗网络(Generative Adversarial Network,GAN)是一种无监督学习的深度学习模型,由Ian Goodfellow等人在2014年提出。GAN包含两个相互竞争的神经网络:生成器(Generator)和判别器(Discriminator)。生成器试图生成看起来像真实数据的假数据,而判别器则试图区分真实数据和生成数据。通过这种对抗过程,生成器能够生成非常逼真的数据。本教程将详细介绍如何使用Python和PyTorch库实现一个简单的GAN,并展示其在MNIST数据集上的应用。

什么是生成对抗网络(GAN)?

生成对抗网络由两个部分组成:

  • 生成器(Generator):接受随机噪声作为输入,并生成假数据。
  • 判别器(Discriminator):接受数据(真实或生成)作为输入,并预测该数据是真实的还是生成的。

GAN的训练过程是生成器和判别器之间的一个博弈:生成器试图欺骗判别器,而判别器试图提高识别真实数据和假数据的能力。

实现步骤

步骤 1:导入所需库

首先,我们需要导入所需的Python库:PyTorch用于构建和训练GAN模型,Matplotlib用于数据的可视化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
import numpy as np
步骤 2:准备数据

我们将使用MNIST数据集作为示例数据。MNIST是一个手写数字数据集,常用于图像处理的基准测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5,), std=(0.5,))  # 将图像归一化到[-1, 1]范围内
])

# 下载并加载训练数据
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
步骤 3:定义生成器和判别器模型

我们定义一个简单的生成器和判别器模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Generator(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(Generator, self).__init__()
        self.main = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU(),
            nn.Linear(hidden_size, hidden_size),
            nn.ReLU(),
            nn.Linear(hidden_size, output_size),
            nn.Tanh()
        )

    def forward(self, x):
        return self.main(x)


class Discriminator(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(Discriminator, self).__init__()
        self.main = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.LeakyReLU(0.2),
            nn.Linear(hidden_size, hidden_size),
            nn.LeakyReLU(0.2),
            nn.Linear(hidden_size, output_size),
            nn.Sigmoid()
        )

    def forward(self, x):
        return self.main(x)

# 定义模型参数
input_size = 100  # 噪声向量的维度
hidden_size = 256
image_size = 28 * 28  # MNIST图像的维度

# 创建生成器和判别器实例
G = Generator(input_size, hidden_size, image_size)
D = Discriminator(image_size, hidden_size, 1)
步骤 4:定义损失函数和优化器

我们选择二元交叉熵(Binary Cross Entropy,BCE)损失函数作为模型训练的损失函数,并使用Adam优化器进行优化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
criterion = nn.BCELoss()
lr = 0.0002

# 创建生成器和判别器的优化器
optimizer_G = optim.Adam(G.parameters(), lr=lr)
optimizer_D = optim.Adam(D.parameters(), lr=lr)
步骤 5:训练模型

我们使用定义的生成器和判别器模型对MNIST数据集进行训练。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_epochs = 50

for epoch in range(num_epochs):
    for i, (images, _) in enumerate(train_loader):
        batch_size = images.size(0)
        images = images.view(batch_size, -1)

        # 创建标签
        real_labels = torch.ones(batch_size, 1)
        fake_labels = torch.zeros(batch_size, 1)

        # 训练判别器
        outputs = D(images)
        d_loss_real = criterion(outputs, real_labels)
        real_score = outputs

        z = torch.randn(batch_size, input_size)
        fake_images = G(z)
        outputs = D(fake_images.detach())
        d_loss_fake = criterion(outputs, fake_labels)
        fake_score = outputs

        d_loss = d_loss_real + d_loss_fake
        optimizer_D.zero_grad()
        d_loss.backward()
        optimizer_D.step()

        # 训练生成器
        z = torch.randn(batch_size, input_size)
        fake_images = G(z)
        outputs = D(fake_images)
        g_loss = criterion(outputs, real_labels)

        optimizer_G.zero_grad()
        g_loss.backward()
        optimizer_G.step()

    print(f'Epoch [{epoch+1}/{num_epochs}], d_loss: {d_loss.item():.4f}, g_loss: {g_loss.item():.4f}, '
          f'D(x): {real_score.mean().item():.4f}, D(G(z)): {fake_score.mean().item():.4f}')
步骤 6:可视化生成结果

训练完成后,我们可以使用训练好的生成器模型生成一些新的手写数字图像,并进行可视化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 生成一些新图像
z = torch.randn(64, input_size)
fake_images = G(z)
fake_images = fake_images.view(fake_images.size(0), 1, 28, 28)

# 可视化生成的图像
grid = torchvision.utils.make_grid(fake_images, nrow=8, normalize=True)
plt.imshow(grid.permute(1, 2, 0).detach().numpy())
plt.title('Generated Images')
plt.show()

总结

通过本教程,你学会了如何使用Python和PyTorch库实现一个简单的生成对抗网络(GAN),并在MNIST数据集上进行训练和生成图像。生成对抗网络是一种强大的生成模型,能够生成逼真的图像数据,广泛应用于图像生成、数据增强、风格转换等领域。希望本教程能够帮助你理解GAN的基本原理和实现方法,并启发你在实际应用中使用GAN解决生成任务。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
随着人工智能领域的迅猛发展,AI生成内容(AIGC,AI Generated Content)正成为创意产业和技术领域的重要组成部分。在AIGC的核心技术中,生成对抗网络(GAN,Generative Adversarial Network)被认为是推动AIGC发展的关键力量之一。本篇博客将详细探讨GAN的工作原理,以及它如何加速AIGC的发展。为了使文章更具深度和可操作性,我们将通过代码示例来解释相关原理和应用场景。
hope kc
2024/11/21
2010
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
探秘生成对抗网络(GAN):原理、应用与代码全知道
生成对抗网络(GAN)自提出以来在深度学习领域备受关注。其独特的对抗训练机制使其在图像生成、数据增强、风格迁移等众多领域展现强大能力。
羑悻的小杀马特.
2025/03/27
6110
【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。值国庆佳节,专知特别推出独家特刊-来自中科院自动化所专知小组博士生huaiwen和Jin创作的-PyTorch教程学习系列, 今日
WZEARW
2018/04/09
1.8K0
【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
深度学习第5天:GAN生成对抗网络
我们知道GAN的全名是生成对抗网络,那么它就是以生成为主要任务,所以可以用在这些方面
Nowl
2024/01/18
1720
深度学习第5天:GAN生成对抗网络
生成对抗网络(GAN)如何推动AIGC的发展
为了更深入理解生成对抗网络(GAN),我们需要探索其更复杂的变种和技术细节。这些变种通常旨在解决GAN的训练不稳定性、生成质量以及应用范围等问题。以下是一些主要的GAN变种及其特性。
用户11292525
2024/11/21
1750
利用pytorch实现GAN(生成对抗网络)-MNIST图像-cs231n-assignment3
In 2014, Goodfellow et al. presented a method for training generative models called Generative Adversarial Networks (GANs for short). In a GAN, we build two different neural networks. Our first network is a traditional classification network, called the discriminator. We will train the discriminator to take images, and classify them as being real (belonging to the training set) or fake (not present in the training set). Our other network, called the generator, will take random noise as input and transform it using a neural network to produce images. The goal of the generator is to fool the discriminator into thinking the images it produced are real. 在生成网络中,我们建立了两个神经网络。第一个网络是典型的分类神经网络,称为discriminator重点内容,我们训练这个网络对图像进行识别,以区别真假的图像(真的图片在训练集当中,而假的则不在。另一个网络称之为generator,它将随机的噪声作为输入,将其转化为使用神经网络训练出来产生出来的图像,它的目的是混淆discriminator使其认为它生成的图像是真的。
老潘
2018/06/21
2.5K0
利用pytorch实现GAN(生成对抗网络)-MNIST图像-cs231n-assignment3
生成对抗网络(GANs)在AIGC中的应用
生成对抗网络(Generative Adversarial Networks, GANs)是近年来在人工智能生成内容(Artificial Intelligence Generated Content, AIGC)领域取得显著进展的重要技术。GANs通过两个神经网络——生成器(Generator)和判别器(Discriminator)——之间的对抗训练,实现了从噪声中生成高质量、逼真的图像和其他类型的内容。本文将深入探讨GANs在AIGC中的应用,并通过一个代码实例来展示其工作原理。
一键难忘
2024/06/19
4990
AIGC-----AIGC如何提升营销与广告效果
在如今快速发展的数字时代,人工智能生成内容(AIGC,AI Generated Content)已经成为推动营销与广告行业变革的重要力量。AIGC的到来为品牌、企业和广告主提供了全新的创作与推广方式,使营销活动的定制化、效率以及效果得到了显著提升。本篇文章将深入探讨AIGC如何提升营销与广告效果,通过多个实际应用的案例与代码实现,帮助你更好地理解AIGC在营销中的强大力量。
hope kc
2024/11/24
5160
AIGC-----AIGC如何提升营销与广告效果
【小白学习PyTorch教程】十一、基于MNIST数据集训练第一个生成性对抗网络
GAN 是使用两个神经网络模型训练的生成模型。一种模型称为生成网络模型,它学习生成新的似是而非的样本。另一个模型被称为判别网络,它学习区分生成的例子和真实的例子。
润森
2022/08/18
4870
【小白学习PyTorch教程】十一、基于MNIST数据集训练第一个生成性对抗网络
【机器学习】--- 生成对抗网络 (GANs)
生成对抗网络(GANs, Generative Adversarial Networks)近年来在机器学习领域成为一个热点话题。自从Ian Goodfellow及其团队在2014年提出这一模型架构以来,GANs 在图像生成、数据增强、风格转换等领域取得了显著进展,并推动了深度学习在生成模型领域的快速发展。本文将详细讨论 GANs 的基础原理、应用场景、常见变体、以及在实际中如何实现 GAN 模型。
Undoom
2024/09/23
1680
深度学习 | GAN,什么是生成对抗网络
GAN是由两部分组成的,第一部分是生成,第二部分是对抗。简单来说,就是有一个生成网络G和一个判别网络D,通过训练让两个网络相互竞争,生成网络G接受一个随机噪声z来生成假的数据G(z),对抗网络D通过判别器去判别真伪概率,最后希望生成器G生成的数据能够以假乱真。在最理想的状态下,D(G(z)) = 0.5。
Justlovesmile
2021/12/14
1.3K0
深度学习 | GAN,什么是生成对抗网络
【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】
无监督学习 是一种机器学习类型,模型在没有标注数据的情况下,通过识别数据中的模式和结构进行学习。
小李很执着
2024/08/14
2650
机器学习---生成对抗网络
生成对抗网络(GANs, Generative Adversarial Networks)近年来在机器学习领域成为一个热点话题。自从Ian Goodfellow及其团队在2014年提出这一模型架构以来,GANs 在图像生成、数据增强、风格转换等领域取得了显著进展,并推动了深度学习在生成模型领域的快速发展。本文将详细讨论 GANs 的基础原理、应用场景、常见变体、以及在实际中如何实现 GAN 模型。
Undoom
2024/09/22
1390
生成学习全景:从基础理论到GANs技术实战
生成学习(Generative Learning)在机器学习领域中占据了重要的位置。它通过学习数据分布的方式生成新的数据实例,这在多种应用中表现出了其独特的价值。本节将深入探讨生成学习的核心概念,明确区分生成学习与判别学习,并探索生成学习的主要应用场景。
TechLead
2024/01/02
3370
生成学习全景:从基础理论到GANs技术实战
深度学习界明星:生成对抗网络与Improving GAN
生成对抗网络,根据它的名字,可以推断这个网络由两部分组成:第一部分是生成,第二部分是对抗。这个网络的第一部分是生成模型,就像之前介绍的自动编码器的解码部分;第二部分是对抗模型,严格来说它是一个判断真假图片的判别器。生成对抗网络最大的创新在此,这也是生成对抗网络与自动编码器最大的区别。简单来说,生成对抗网络就是让两个网络相互竞争,通过生成网络来生成假的数据,对抗网络通过判别器判别真伪,最后希望生成网络生成的数据能够以假乱真骗过判别器。过程如图1所示。
博文视点Broadview
2020/06/11
4330
深度学习界明星:生成对抗网络与Improving GAN
生成式AI核心技术详解:从GANs到Transformers
生成式AI(Generative AI)作为人工智能的一个重要分支,通过学习大量的数据生成新的数据样本,在多个领域取得了令人瞩目的进展。生成式AI不仅在学术研究中激发了广泛的兴趣,也在工业应用中展示了巨大的潜力,推动了图像生成、文本生成、视频生成等领域的快速发展。
TechLead
2024/05/29
5.8K0
生成式AI核心技术详解:从GANs到Transformers
【深度学习】生成对抗网络(GAN)
生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。生成对抗网络被认为是当前最具前景、最具活跃度的模型之一,目前主要应用于样本数据生成、图像生成、图像修复、图像转换、文本生成等方向。
杨丝儿
2022/03/20
2.7K0
【深度学习】生成对抗网络(GAN)
从虚拟到真实:解读GAN生成超真实图像的魔法
大家好,我是Echo_Wish,一直致力于探索人工智能的技术潜力。今天我要带大家进入一个神奇的领域——GAN(生成对抗网络),它是让机器画出“超真实图像”的关键技术。说实话,GAN听起来可能有点复杂,但它实际上就像两个AI在PK,一个负责创造,另一个负责挑刺,最后逼得“创作AI”变得越来越厉害,直到创作出以假乱真的作品。接下来,我会从GAN的工作原理入手,再通过实际代码演示如何用GAN生成超真实图像,为大家揭开这项技术的神秘面纱。
Echo_Wish
2025/04/08
1490
从虚拟到真实:解读GAN生成超真实图像的魔法
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
0.1. 利用GPU加速深度学习   疫情期间没有办法用实验室的电脑来跑模型,用领取的腾讯云实例来弄刚刚好。发现如果没有GPU来跑的话真的是太慢了,非常推荐利用GPU加速深度学习的训练速度。     如果采用GPU的话,训练函数train_model(*)中数据的输入要改变一下,也就是需要将数据放在GPU上
汉堡888
2022/05/03
8.8K0
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
AI绘画:开启艺术与科技融合的未来之门(10/10)
在科技飞速发展的今天,AI 绘画作为人工智能与艺术领域融合的创新成果,正以惊人的速度改变着我们对艺术创作的认知。短短几年间,AI 绘画从一个新奇的概念迅速演变为大众广泛参与、行业深度应用的热门领域,热度居高不下。从社交媒体上大量涌现的 AI 绘画作品分享,到艺术展览中 AI 绘画作品的频频亮相,再到影视、游戏、广告等行业对 AI 绘画技术的积极探索,AI 绘画已经渗透到我们生活的方方面面。它不仅为普通爱好者提供了便捷的创作途径,让每个人都能轻松实现自己的艺术梦想,也为专业艺术家和设计师们带来了全新的创作灵感和工具,开启了艺术创作的无限可能。
正在走向自律
2025/02/10
2940
AI绘画:开启艺术与科技融合的未来之门(10/10)
推荐阅读
相关推荐
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验