GAN简介
生成对抗网络(Generative adversarial networks)是深度学习领域的一个重要生成模型,即两个网络(生成模型和鉴别模型)在同一时间训练并且在极小化极大算法(minimax)中进行竞争。
注:
1.生成模型从本质上是一种极大似然估计,用于产生指定分布数据的模型,生成模型的作用是捕捉样本数据的分布、将原输入信息的分布情况经过极大似然估计中参数的转化来将训练偏向转换为指定分布的样本。
2.判别模型实际上是个二分类,会对生成模型生成的图像等数据进行判断,判断其是否是真实的训练数据中的数据。
mnist生成
# coding=utf-8
import torch.autograd
import torch.nn as nn
from torch.autograd import Variable
from torchvision import transforms
from torchvision import datasets
from torchvision.utils import save_image
import os
# 创建文件夹
if not os.path.exists('./img2'):
os.mkdir('./img2')
def to_img(x):
out = 0.5 * (x + 1)
out = out.clamp(0, 1) # Clamp函数可以将随机变化的数值限制在一个给定的区间[min, max]内:
out = out.view(-1, 1, 28, 28) # view()函数作用是将一个多行的Tensor,拼接成一行
return out
batch_size = 128
num_epoch = 1000
z_dimension = 50
# 图像预处理
img_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1,), (0.5,))
])
# mnist dataset mnist数据集下载,没有下载的将download改成True
mnist = datasets.MNIST(
root='./mnist/', train=True, transform=img_transform, download=False
)
# data loader 数据载入
dataloader = torch.utils.data.DataLoader(
dataset=mnist, batch_size=batch_size, shuffle=True
)
# 定义判别器 #####Discriminator######使用多层网络来作为判别器
# 将图片28x28展开成784,然后通过多层感知器,中间经过斜率设置为0.2的LeakyReLU激活函数,
# 最后接sigmoid激活函数得到一个0到1之间的概率进行二分类。
class discriminator(nn.Module):
def __init__(self):
super(discriminator, self).__init__()
self.dis = nn.Sequential<