wgan 不理解 损失函数_WGAN源码解读

作者的代码包括两部分:models包下包含dcgan.py和mlp.py, 这两个py文件是两种不同的网络结构,在dcgan.py中判别器和生成器都含有卷积网络,而mlp.py中判别器和生成器都只是全连接。  此外main.py为主函数,通过引入import models中的生成器和判别器来完成训练与迭代。

参数说明(main.py中):

parser =argparse.ArgumentParser()

parser.add_argument('--dataset', required=True, help='cifar10 | lsun | imagenet | folder | lfw')

parser.add_argument('--dataroot', required=True, help='path to dataset')

parser.add_argument('--workers', type=int, help='number of data loading workers', default=2)

parser.add_argument('--batchSize', type=int, default=64, help='input batch size')

parser.add_argument('--imageSize', type=int, default=64, help='the height / width of the input image to network')

parser.add_argument('--nc', type=int, default=3, help='input image channels')

parser.add_argument('--nz', type=int, default=100, help='size of the latent z vector')

parser.add_argument('--ngf', type=int, default=64)

parser.add_argument('--ndf', type=int, default=64)

parser.add_argument('--niter', type=int, default=25, help='number of epochs to train for')

parser.add_argument('--lrD', type=float, default=0.00005, help='learning rate for Critic, default=0.00005')

parser.add_argument('--lrG', type=float, default=0.00005, help='learning rate for Generator, default=0.00005')

parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5')

parser.add_argument('--cuda' , action='store_true', help='enables cuda')

parser.add_argument('--ngpu' , type=int, default=1, help='number of GPUs to use')

parser.add_argument('--netG', default='', help="path to netG (to continue training)")

parser.add_argument('--netD', default='', help="path to netD (to continue training)")

parser.add_argument('--clamp_lower', type=float, default=-0.01)

parser.add_argument('--clamp_upper', type=float, default=0.01)

parser.add_argument('--Diters', type=int, default=5, help='number of D iters per each G iter')

parser.add_argument('--noBN', action='store_true', help='use batchnorm or not (only for DCGAN)')

parser.add_argument('--mlp_G', action='store_true', help='use MLP for G')

parser.add_argument('--mlp_D', action='store_true', help='use MLP for D')

parser.add_argument('--n_extra_layers', type=int, default=0, help='Number of extra layers on gen and disc')

parser.add_argument('--experiment', default=None, help='Where to store samples and models')

parser.add_argument('--adam', action='store_true', help='Whether to use adam (default is rmsprop)')

1.models包中的mlp.py:

from __future__ importabsolute_importfrom __future__ importdivisionfrom __future__ importprint_functionfrom __future__ importunicode_literalsimporttorchimporttorch.nn as nnclassMLP_G(nn.Module):def __init__(self, isize, nz, nc, ngf, ngpu):

super(MLP_G, self).__init__()

self.ngpu=ngpu

main=nn.Sequential(#Z goes into a linear of size: ngf

nn.Linear(nz, ngf),

nn.ReLU(True),

nn.Linear(ngf, ngf),

nn.ReLU(True),

nn.Linear(ngf, ngf),

nn.ReLU(True),

nn.Linear(ngf, nc* isize *isize),

)

self.main=main

self.nc=nc

self.isize=isize

self.nz=nzdefforward(self, input):

input= input.view(input.size(0), input.size(1))if isinstance(input.data, torch.cuda.FloatTensor) and self.ngpu > 1:

output=nn.parallel.data_parallel(self.main, input, range(self.ngpu))else:

output=self.main(input)returnoutput.view(output.size(0), self.nc, self.isize, self.isize)classMLP_D(nn.Module):def __init__(self, isize, nz, nc, ndf, ngpu):

super(MLP_D, self).__init__()

self.ngpu=ngpu

main=nn.Sequential(#Z goes into a linear of size: ndf

nn.Linear(nc * isize *isize, ndf),

nn.ReLU(True),

nn.Linear(ndf, ndf),

nn.ReLU(True),

nn.Linear(ndf, ndf),

nn.ReLU(True),

nn.Linear(ndf,1),

)

self.main=main

self.nc=nc

self.isize=isize

self.nz=nzdefforward(self, input):

input=input.view(input.size(0),

input.size(1) * input.size(2) * input.size(3))if isinstance(input.data, torch.cuda.FloatTensor) and self.ngpu > 1:

output=nn.parallel.data_parallel(self.main, input, range(self.ngpu))else:

output=self.main(input)</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值