生成器如何获得输入噪声 z?

How can generator get input noise z?

您好,我正在查看这个 GAN 实现代码。 code here

我的问题是生成器 class 在定义 class 生成器时没有输入参数(来自 link 的#38) 但是在训练时,生成器获取输入 z(link 中的#141)。 我查看了 nn.Module class 是 class Generator 的父级,但我找不到噪声 z 的输入参数。有人可以帮忙吗?

class Generator(nn.Module):    #38
    def __init__(self):
        super(Generator, self).__init__()

        def block(in_feat, out_feat, normalize=True):
            layers = [nn.Linear(in_feat, out_feat)]
            if normalize:
                layers.append(nn.BatchNorm1d(out_feat, 0.8))
            layers.append(nn.LeakyReLU(0.2, inplace=True))
            return layers

        self.model = nn.Sequential(
            *block(opt.latent_dim, 128, normalize=False),
            *block(128, 256),
            *block(256, 512),
            *block(512, 1024),
            nn.Linear(1024, int(np.prod(img_shape))),
            nn.Tanh()
        )

    def forward(self, z):
        img = self.model(z)
        img = img.view(img.size(0), *img_shape)
        return img
generator = Generator()    #88
gen_imgs = generator(z)    #141

我尝试在 pytorch 文档中寻找 nn.Module、variable(),但仍然找不到我想要的。

考虑引用的每一行(38、88 和 141):

  • 第 38 行是 class 的定义,通过将 nn.Module 放在方括号中,它声明从 class nn.Module 继承 class Generator(这是定义您的常用方法自己的神经网络)。
  • 在第 88 行创建了 class 生成器的实例——对于参数,它需要 __init__ 括号内的所有内容(第 39 行),除了 self,这就是为什么括号第 88 行是空的。
  • 并且在第 141 行调用了 genearator,此处的行为由方法 forward(第 58 行)定义,并且有一个参数要传递 -- z

同样,第 88 行创建了一个实例,第 141 行调用了实例的 forward 方法。