pytorch实现dcgan_Pytorch使用MNIST数据集实现基础GAN和DCGAN详解

原始生成对抗网络Generative Adversarial Networks GAN包含生成器Generator和判别器Discriminator,数据有真实数据groundtruth,还有需要网络生成的“fake”数据,目的是网络生成的fake数据可以“骗过”判别器,让判别器认不出来,就是让判别器分不清进入的数据是真实数据还是fake数据。总的来说是:判别器区分真实数据和fake数据的能力越强越好;生成器生成的数据骗过判别器的能力越强越好,这个是矛盾的,所以只能交替训练网络。

需要搭建生成器网络和判别器网络,训练的时候交替训练。

首先训练判别器的参数,固定生成器的参数,让判别器判断生成器生成的数据,让其和0接近,让判别器判断真实数据,让其和1接近;

接着训练生成器的参数,固定判别器的参数,让生成器生成的数据进入判别器,让判断结果和1接近。生成器生成数据需要给定随机初始值

线性版:

import torch

from torch.utils.data import DataLoader

from torchvision.datasets import MNIST

from torchvision import transforms

from torch import optim

import torch.nn as nn

import matplotlib.pyplot as plt

import numpy as np

import matplotlib.gridspec as gridspec

def showimg(images,count):

images=images.detach().numpy()[0:16,:]

images=255*(0.5*images+0.5)

images = images.astype(np.uint8)

grid_length=int(np.ceil(np.sqrt(images.shape[0])))

plt.figure(figsize=(4,4))

width = int(np.sqrt((images.shape[1])))

gs = gridspec.GridSpec(grid_length,grid_length,wspace=0,hspace=0)

# gs.update(wspace=0, hspace=0)

print('starting...')

for i, img in enumerate(images):

ax = plt.subplot(gs[i])

ax.set_xticklabels([])

ax.set_yticklabels([])

ax.set_aspect('equal')

plt.imshow(img.reshape([width,width]),cmap = plt.cm.gray)

plt.axis('off')

plt.tight_layout()

print('showing...')

plt.tight_layout()

plt.savefig('./GAN_Image/%d.png'%count, bbox_inches='tight')

def loadMNIST(batch_size): #MNIST图片的大小是28*28

trans_img=transforms.Compose([transforms.ToTensor()])

trainset=MNIST('./data',train=True,transform=trans_img,download=True)

testset=MNIST('./data',train=False,transform=trans_img,download=True)

# device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

trainloader=DataLoader(trainset,batch_size=batch_size,shuffle=True,num_workers=10)

testloader = DataLoader(testset, batch_size=batch_size, shuffle=False, num_workers=10)

return trainset,testset,trainloader,testloader

class discriminator(nn.Module)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值