如何解读GAN培训提高产出?

时间:2020-07-22 18:55:15

标签: machine-learning neural-network generative-adversarial-network

经过几次尝试,我训练了GAN来产生半敏感的输出。在此模型中,它几乎立即找到了解决方案并被卡在那里。鉴别器和生成器的损失均为0.68(我使用了BCE损失),并且两者的准确度均达到了50%左右。生成器的输出乍一看足以成为真实数据,但是经过分析,我发现它仍然不是很好。

我在这里的解决方案是增加鉴别器的功能(增加其大小)并重新训练。我希望通过使其更大来迫使发生器生成更好的样本。我得到以下输出。

training accuracy training loss

随着GAN损失的增加和产生的样品越来越差,鉴别器可以更容易地将其识别出来。

当我检查来自训练有素的生成器的输出时,我看到它遵循了真实数据遵循的一些基本规则,但是再次经过严格的审查,它们未能通过更复杂的测试,真实数据将通过。我想改善这一点。

我的问题是:

  • 我对地块的上述解释正确吗?
  • 为此,我是否使鉴别器功能强大?我应该增加发电机的功率吗?
  • 还有其他我应该研究的技术来阻止这种形式的模式崩溃吗?

编辑:我正在使用的体系结构是Graph GAN的一种形式。生成器只是一系列线性层。判别器是3个Graph Conv图层,然后是一些线性图层。与此paper有点类似。我正在做的两件事可能是非常规的:

  • 没有批量标准化,我发现这对培训有非常不利的影响。虽然我可以尝试并坚持下去。
  • 我正在使用StandardScaler缩放数据。之所以做出此选择,是因为它很容易使您无法缩放数据。这非常有用,因为我可以获取生成器的输出并将其轻松转换为原始比例。但是,StandardScaler不会在1到-1之间缩放,因此我不能将tanh用作生成器的最终激活函数,相反,生成器的最后一层只是线性的。

GAN的输出(一旦重新缩放并且形状已更改)类似于:

[[ 46.09169   -25.462175   20.705683  -31.696495 ]
 [ 35.10637   -18.956036   15.20579   -24.803787 ]
 [ 10.253135   -5.759581    5.9068713  -6.3003526]]

一个真实的例子是:

[[ 45.6         30.294546   -17.218746   -29.41284   ]
 [  1.8186008    1.7064333    0.5984112    0.19312467]
 [ 44.31433     28.234058   -17.615921   -29.262213  ]]

值得注意的是,矩阵的左上角值始终为45.6。我的生成器甚至不能始终如一地产生这个。

0 个答案:

没有答案