改良网络的方法:
1.更改损失函数:将均方差损失函数MSELoss() 更改为 BCEloss。更改后测试数据集的性能分(准确率)从87%提高到91%。但下降速度较MSELoss慢,且噪声更大。
2.更改激活函数:S型激活函数的缺点是:在输入值变大时,梯度会变得非常小甚至消失。这意味着,在训练神经网络时,如果发生这种饱和,我们无法通过梯度来更新链接权重。
文章图片
【pytorch|pytorch快速入门(五)——pytorch 生成对抗网络】可选用直线作为激活函数,直线的固定梯度是永远不会消失的
文章图片
文章图片
3.改良反向传播梯度更新网络权重的方法。
随机梯度下降的缺点之一是,它会陷入损失函数的局部最小值(local minima)
另一个缺点是,它对所有可学习的参数都使用单一的学习率。
最常见的代替优化器是Adam,它直接解决了以上两个缺点。首先,它利用动量(momentum)的概念,减少陷入局部最小值的可能性。同时,它对每个可学习参数使用单独的学习率,这些学习率随着每个参数在训练期间的变化而改变.
4.假设我们用一个被训练用于生成图像的神经网络,取代之前只能用于生成低质量图像的组件。我们称它为生成器(G ).同时,我们把分类器称为鉴别器(D)。
鉴别器的作用是把真实的图像和生成的图像区分开。如果生成器表现不佳,区分工作很容易通过。如果训练生成器,它的表现会越来越好,并且生成越来越逼真的图像。
如何训练生成器。训练的关键在于,我们希望奖励哪些行为,惩罚哪些行为。这也正是损失函数的作业。
如果图像通过了鉴别器的检验,我们就奖励生成器。
如果伪造的图像被识破,我们惩罚生成器。
下面的三步训练循环是实现这一目标的一种方法。
第1步——向鉴别器展示一个真实的数据样本,告诉它该样本的分类应该是1.我们再用损失来更新鉴别器。
文章图片
第2步——训练鉴别器。向鉴别器显示一个生成器的输出,告诉它该样本的分类应该是0。我们只用损失来更新鉴别器。在这一步我们不要更新生成器。因为我们不希望它因为被鉴别器识破而受到奖励。在编写GAN的代码时,我们要考虑如何防止更新通过计算图回到生成器。
文章图片
第3步——训练生成器。向鉴别器显示一个生成器的输出,告诉生成器结果应该是1.我们只用结果的损失来更新生成器,而不更新鉴别器。因为我们不希望因为错误分类而奖励鉴别器。
文章图片
我们希望生成器和鉴别器是共同学习的,而不是一方快,或者是一方慢。
标准的GAN训练循环有3个步骤。
(1)用真实的训练数据集训练鉴别器;
(2)用生成的数据训练鉴别器;
(3)训练生成器生成数据,并使鉴别器以为它是真实数据。
推荐阅读
- 数学建模|数学建模(线性回归模型)
- 机器学习|神经网络(七)优化与正则化
- 机器学习|神经网络(六)循环神经网络
- 机器学习|无监督学习分类
- GAN|GAN(生成对抗网络)学习——pytorch实现MINIST手写数据集生成
- 机器学习|神经网络(八)注意力机制与外部记忆
- 笔记|基于Unet++、Deeplabv3+、MANet的GF-1遥感影像水体语义分割
- 深度学习|【Yolov5在‘Segmentation-Based-Surface-Defect-Detection’上的验证】
- 机器学习|2020李宏毅机器学习笔记-Unsupervised Learning: Deep Auto-encoder