DCGAN mnist help!~

就想弄个生成数字,不知道为什么就一直训练不出来(急急急

生成的图(2个epoch)(多次尝试的其中一个,其他的更离谱,这个至少模式坍塌的不那么彻底)

loss图(也是2epoch

loss: D

loss: G

我寻思这loss差不多都ln2简直完美(用的BCELoss

而且训练时间(5min+/epoch)(cpu)也比全连接GAN长(悲

生成器

def __init__(self):
    super(G, self).__init__()
    self.linear = nn.Sequential(
        nn.Linear(110, 3 * 11 * 11),
        nn.LeakyReLU()
    )
    self.conv = nn.Sequential(
        nn.ConvTranspose2d(3, 64, 4),
        nn.BatchNorm2d(64),
        nn.LeakyReLU(),
        nn.ConvTranspose2d(64, 1, 2, 2),
        nn.Tanh()
    )

def forward(self, inputs, label_tensors):
    return self.conv(self.linear(torch.cat((inputs, label_tensors), 1)).view(-1, 3, 11, 11))

判别器

def __init__(self):
    super(D, self).__init__()
    self.conv = nn.Sequential(
        nn.Conv2d(1, 10, 3),
        nn.LeakyReLU(),
        nn.MaxPool2d(2),
        nn.Conv2d(10, 20, 4),
        nn.LeakyReLU(),
        nn.MaxPool2d(2),
    )
    self.linear = nn.Sequential(
        nn.Linear(500 + 10, 100),
        nn.LeakyReLU(),
        nn.BatchNorm1d(100),
        nn.Linear(100, 1),
        nn.Sigmoid()
    )

def forward(self, inputs, label_tensors):
    inputs = torch.cat((self.conv(inputs).view(-1, 500), label_tensors), 1)
    return self.linear(inputs)

优化器(一样)

self.optimiser = torch.optim.Adam(self.parameters(), lr=0.0001)

真蚌埠住了,看网上的都是1000多个通道的卷积层,电脑是在8是很行,就是说想找那种判别器生成器参数都不是很多(最好别超50w)

还有就是想知道为什么明明loss完美但是生成的图却这么......一言难尽

谢谢

gan·mnist·pytorch
138 views
Comments
登录后评论
Sign In
·

看了一下别人的DCGAN生成手写数字,生成器噪声到转置卷积层中间的一个全连接层就有1,379,000+个参数,哈人

·

之前写的全全连接的GAN生成的图效果挺好的,d和g的参数量分别是159201和179784,属实不理解DCGAN为什么有了卷积的感受野还这么拉(速度,参数量,平衡难度),还得考虑棋盘效应 fearful