GAN生成对抗网络以及pytorch实现

本文介绍了GAN的基本原理,包括生成器Generator和判别器Discriminator的作用,以及它们在图像生成任务中的应用。在Mnist数据集上,通过线性网络将随机噪声转换为图像。GAN的训练过程包括对判别器和生成器的前向传播和反向传播。文章最后提供了一个使用PyTorch实现GAN的代码示例。
摘要由CSDN通过智能技术生成
                **GAN生成对抗网络以及pytorch实现**

首先GAN近些年来在图像生成等相关方面有很多的应用,我就刚开始看GAN说下自己的理解。
GAN中分为两个模块,一个是生成器Generator(以下用G表示),判别器Discriminator(以下用D表示),这两个我们都可以看成一个神经网络。
例如我们针对Mnist数据集,如果,图像的可以的维度是2828,那么G就是从一个向量生成一个2828的矩阵,这个矩阵如果使用线性网络就是的得到一个1784的向量,比如向量是1100的随机向量,(这个向量可以通过随机生成得到,也就是噪声)我们通过Linear得到一个1784然后reshape得到2828的图片。判别器D就是从这个图片中得到一个分数,我们理想的目标是判别器对真实图片识别得到的分数越高越好,即更接近1,对生成器G生成的图片得分越低越好,更接近0。如下图所示的大概过程(中间的hidden layer其实就是生成器G的输出):

图像来自李宏毅教授课程
那么知道了整体的网络结构,下面介绍GAN的前向传播和反向传播过程:
图片来自李宏毅教授课程

  1. 选取m个真实的图片样本
  2. 选取m个噪声样本,每一个噪声样本为一个向量,向量的长度可以自己确定,分布可以任选一个分布,比如正态分布等。
  3. 将噪声输入生成器G中,m个样本会得到m个图片,如果是线性就是m*784的向量。
  4. 然后对判别器进行训练,我们要得到的结果就是判别器对真实图片的得分更高,对虚假的图片得分更低,也就是真实图片更接近1,虚假图片更接近0,在具体代码中,可以计算对真实图片的得分和1的交叉熵loss_real,对虚假图片的得分和0交叉熵loss_fake,那么判别器的总损失为两个相加,并且两个都是越小越好。
  5. 然后进行生成器的训练和更新,在生成器,要是生成器生成的图片更接近真实的图片,也就还是D(G(z))的值越接近于1,生成器就越好,那么生成器的损失就是g_loss为D(G(z))和1的交叉熵,那么也就是越小越好。
    使用pytorch进行实现的代码如下:
# GAN的核心就是类似一个造假器
# 拥有一个Generator和Discriminator,G和N都是一个neural network
# G即使生成器,生成器可以从一个随机的向量中得到一个图片,
# D即判别器,判别器就是判断从G中生成的图片是否为真实的图片,图片会存在分类,真实的图片为1,G生成的图片为0即为假
# 1.初始化G和N
# 2.in each training iteration:
#    (1).首先固定住G的参数,然后去更新D的参数,目的是为了使D中识别出G的图片分数更低,然后对真实的图片分数更高。
#    (2).然后固定住D,更新G的参数,在更新参数的过程中,可以将G和N当作一整个网络,例如G和N都是五层,那么网络就是10层, 在10层中间,会有一个hidden layer,即使一个图片的向量,
# 例如64*64的向量,那么也就是说整个网络输入的是一个向量,然后在这个过程中
import torch
import torch.nn as nn
import torchvision
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.optim as optim
import os
from torchvision.utils import save_image
import matplotlib.pyplot as plt
transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.1307,), (0.3081, ))
    ])
train_dataset = datasets.MNIST(
        root='../datase
  • 9
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值