GAN 由 Ian Goodfellow 在2014年提出。GAN通过训练两个相互对抗的神经网络解决了非监督学习问题,其中一个是生成(Generator)网络,另一个叫判别(discriminator)网络。
GAN可以借助假币伪造者(生成网络)和 警察(判别网络)的例子来理解。最初,伪造者向警察展示随机生成的假钞票,警察识别出钞票是假的,伪造者根据收到的反馈制造了新的假钞票。如此重复相当多次,直到伪造者可以造出警察无法识别、足以以假乱真的钞票。在GAN的场景中,最后得到了可以生成和真实图片非常相似的图片的生成网络,以及可以高度识别伪造品的判别网络。
GAN是伪造网络和专家网络的联合,每个网络都被训练来打败对方。生成网络以随机变量为输入并生成一张合成图片。判别网络拿到输入的图片,并判断图片是真实的还是伪造的。我们给判别网络要么传入一张真实图片,要么传入一张伪造图片。生成网络训练生成图片,欺骗判别网络,想让其相信图片是真实的。判别网络也会持续改进,基于得到的反馈反进行欺骗训练。
DCGAN是早期的GAN模型之一
from future import print_function
import argparse
import os
import random
import torch
import torch.nn as nn
import torch.nn.parallel
import torch.backends.cudnn as cudnn
import torch.optim as optim
import torch.utils.data
import torchvision.datasets as dset
import to