原始GAN读代码过程中的分散知识点

1、关于噪声z的维度大小和Generator输出样本个数的关系

在论文《Effective data generation for imbalanced learning using Conditional Generative Adversarial Networks》 中提到,噪声z的维度dz,以及G和D内部隐藏层的数量是超参数

GAN源代码是这样定义z的: 

# 噪声z是一个随机变量,服从[0,1]的正态分布,维度为(图像的高度*隐层的维度)
z = Variable(Tensor(np.random.normal(0, 1, (imgs.shape[0], opt.latent_dim))))

其中,imgs.shape[0]经过验证为128,也就是batch_size的大小,而latent_dim是隐层的维度,在前面设置了默认值为100

numpy.random.normal(loc=0.0, scale=1.0, size=None)

其中参数loc为分布的均值,scale为分布的标准差

size为整数或者整数组成的元组,表示输出值的维度。如果给定的维度为(m, n, k),那么就从分布中抽取m * n * k个样本。如果size为None(默认值)并且locscale均为标量,那么就会返回一个值。否则会返回np.broadcast(loc, scale).size个值

在本例中,从服从[0,1]分布的随机数据中抽取了128*100=12800个样本作为噪声z,也就是说z只是一个数,不是向量,一共输入了12800个z

输出时的代码为:

batches_done = epoch * len(dataloader) + i
        if batches_done % opt.sample_interval == 0:
            save_image(gen_imgs.data[:25], "images/%d.png" % batches_done, nrow=5, normalize=True)

epoch=[0,100),len(dataloader)=469,i=[0,468)

所以batches_done=[0,1,2,……,46900]

opt.sample_interval为前面设置的图片间隔,等于400,因此每训练400张图片输出一次,46900/400=117…100,也就是说应该输出118次

文件夹里图片的序号为0,400,800,……,93600,共236张图片,也就是说输出了118的两倍,这是为什么呢?

不过可以确定的是,输出图片的数量与z的维度无关 !而与

 这里通过讨论,搞明白了我一直以来困惑的一个点,就是对于这种输入为图片的神经网络,它的输入层维度(特征数)=图片的高*图片的宽

这也是为什么GAN能实现“降维”:原本我们训练样本图片为1*28*28,也就是说输入维度应该是784,但是当噪声z变为输入时,我们可以将维度从784降到100

在训练阶段,z的数量必须等于batch_size,等到训练好以后,需要使用Generator生成样本时,可以把128改成1000(比如需要生成1000个样本)

这里还有一点小疑问,为什么生成的样本数与输出层的参数无关?

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值