pytorch快速入门(五)——pytorch 生成对抗网络

改良网络的方法:

1.更改损失函数:将均方差损失函数MSELoss() 更改为 BCEloss。更改后测试数据集的性能分(准确率)从87%提高到91%。但下降速度较MSELoss慢,且噪声更大。

2.更改激活函数:S型激活函数的缺点是:在输入值变大时,梯度会变得非常小甚至消失。这意味着,在训练神经网络时,如果发生这种饱和,我们无法通过梯度来更新链接权重。

可选用直线作为激活函数,直线的固定梯度是永远不会消失的

3.改良反向传播梯度更新网络权重的方法。

随机梯度下降的缺点之一是,它会陷入损失函数的局部最小值(local minima)

另一个缺点是,它对所有可学习的参数都使用单一的学习率。

最常见的代替优化器是Adam,它直接解决了以上两个缺点。首先,它利用动量(momentum)的概念,减少陷入局部最小值的可能性。同时,它对每个可学习参数使用单独的学习率,这些学习率随着每个参数在训练期间的变化而改变.

4.假设我们用一个被训练用于生成图像的神经网络,取代之前只能用于生成低质量图像的组件。我们称它为生成器(G ).同时,我们把分类器称为鉴别器(D)。

鉴别器的作用是把真实的图像和生成的图像区分开。如果生成器表现不佳,区分工作很容易通过。如果训练生成器,它的表现会越来越好,并且生成越来越逼真的图像。

如何训练生成器。训练的关键在于,我们希望奖励哪些行为,惩罚哪些行为。这也正是损失函数的作业。

如果图像通过了鉴别器的检验,我们就奖励生成器。

如果伪造的图像被识破,我们惩罚生成器。

下面的三步训练循环是实现这一目标的一种方法。

第1步——向鉴别器展示一个真实的数据样本,告诉它该样本的分类应该是1.我们再用损失来更新鉴别器。

 

第2步——训练鉴别器。向鉴别器显示一个生成器的输出,告诉它该样本的分类应该是0。我们只用损失来更新鉴别器。在这一步我们不要更新生成器。因为我们不希望它因为被鉴别器识破而受到奖励。在编写GAN的代码时,我们要考虑如何防止更新通过计算图回到生成器。

 

第3步——训练生成器。向鉴别器显示一个生成器的输出,告诉生成器结果应该是1.我们只用结果的损失来更新生成器,而不更新鉴别器。因为我们不希望因为错误分类而奖励鉴别器。

我们希望生成器和鉴别器是共同学习的,而不是一方快,或者是一方慢。

标准的GAN训练循环有3个步骤。

(1)用真实的训练数据集训练鉴别器;

(2)用生成的数据训练鉴别器;

(3)训练生成器生成数据,并使鉴别器以为它是真实数据。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值