pytorch实现DCGAN

参数

dataroot :存放数据集根目录
workers :DataLoader读取数据线程数
batch_size :训练的batch size,论文中去128
image_size:用于训练的图片大小
nc:输入图像通道数,取3
nz:隐层向量长度
ngf:与生成器特征图深度相关变量
ndf:与判别器特征图深度相关变量
num_epochs:epoch数
lr:论文取0.0002
beta1:Adam参数,取0.5
ngpu:

实现步骤

准备

使用dataset.ImageFolder创建dataset实例
创建dataloader
设置device
使用plt和torchvision中make_grid展示部分图片

权重初始化

声明*weights_init(m)*函数,对m权重进行初始化,若m为卷积层,设置mean=0,stdev=0.02,若m为BatchNorm层,nn.init.normal_(m.weight.data, 1.0, 0.02)

生成器

在这里插入图片描述
1.定义Generator类,
参数:self.ngpu,self.main
反卷积->BatchNorm->ReLU
2.声明netG实例,
并to device,
nn.DataParallel,
apply权重初始化方法
打印netG

判别器

1.定义Discriminator类,
参数:self.ngpu,self.main
卷积->BatchNorm->LeakyReLU
2.声明netD实例,
并to device,
nn.DataParallel,
apply权重初始化方法
打印netD

损失函数与优化器

使用Binary Cross Entropy loss(BCEloss),real为1,fake为0
ℓ(x,y)=L={l1,…,lN}⊤,ln=−[yn⋅logxn+(1−yn)⋅log(1−xn)]
生成fixed_noise
定义Adam优化器 optimizerD, optimizerG

训练

每个mini batch全为真或全为假
生成器目标函数:最大化logD(G(z))

1.训练判别器

我们希望最大化log(D(x))+log(1−D(G(z))) ,首先喂给D真数据,计算log(D(x)),然后backward;然后喂给D假数据,计算log(1−D(G(z))) ,累计梯度backward;最后optimizer.step.

2.训练生成器

对于生成器.我们希望最小化log(1−D(G(z))) ,改写为最大化log(D(G(z))).
我们生成器的输出送给D,label为真
使用fixed_noise对训练过程进行统计
Loss_D:判别器损失,所有真假batches的和log(D(x))+log(D(G(z)))
Loss_G:生成器损失log(D(G(z)))
D(x):判别器对于所有真样本的平均输出值,最初接近1,收敛于0.5
D(G(z)):判别器对于所有生成样本的输出,最初接近0,收敛于0.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值