NetGANOperator

NetGANOperator[{generator,discriminator}]

表示一个网络,用生成网络 generator 和分类网络 discriminator 来执行 generative adversarial network (GAN) 训练.

NetGANOperator[{generator,discriminator},loss]

指定使用的损失函数类型.

更多信息和选项

  • NetGANOperator 可用于训练各种类型数据的生成模型.
  • 在训练 NetGANOperator[] 过程中,生成器和判别器进行零和游戏竞赛. 生成器试图欺骗判别器,判别器试图区分真实数据与生成数据.
  • NetGANOperator[{generator,discriminator},] 中,generatordiscriminator 应接受一个输入,生成一个输出. 另外,generator 应生成与 discriminator 的输入兼容的输出,即应输出一个标量.
  • NetGANOperator[] 的输入端口为:
  • "Sample"真实样本,判别器应给出高分
    "Latent"输入生成器的种子,以生成假样本
  • 输出端口为:
  • "LossReal"判别器在真实样本上的损失
    "LossFake"判别器在假样本上的损失
    "GeneratedFake"生成的假样本
  • NetGANOperator 实现以下结构:
  • NetGANOperator[] 的训练过程中,NetTrain 自动最小化判别器的损失 "LossReal""LossFake" 的和. 从判别器到生成器的梯度被反转,因此 NetTrain 使生成器的 "LossFake" 最大化.
  • 通常情况下,TrainingUpdateSchedule 被用在 NetTrain 中,以避免同时对判别器和生成器进行更新. TrainingUpdateSchedule 还可使对判别器的更新比生成器的更新更频繁.
  • NetGANOperator[,loss] 中,loss 的可能的值包括:
  • Automatic根据判别器的输出层自动计算损失
    "JensenShannon"Jensen-Shannon 散度
    "Wasserstein"在 Wasserstein-GAN 中使用的 Earth Mover 距离的近似
  • 当设为 "JensenShannon" 时,由下式给出损失:
  • "LossReal"-Log[discriminator[sample]]
    "LossFake"-Log[1-discriminator[generator[latent]]
  • 当设为 "Wasserstein" 时,由下式给出损失:
  • "LossReal"-discriminator[sample]
    "LossFake"discriminator[generator[latent]]
  • 可包含以下训练参数:
  • LearningRateMultipliersAutomatic网络中可训练数组的学习率乘子
  • Options[NetGANOperator] 给出构建运算器的默认选项的列表. Options[NetGANOperator[]] 给出在一些数据上运行运算器的默认选项列表.
  • Information[NetGANOperator[]] 给出关于运算器的报告.
  • Information[NetGANOperator[],prop] 给出 NetGANOperator[] 的属性 prop 的值. 可能的属性NetGraph 相同.

范例

打开所有单元关闭所有单元

基本范例  (1)

定义一个 NetGANOperator 来生成数字:

训练该 operator,交替更新生成器和判别器:

提取生成器:

生成数字并可视化其分布:

应用  (4)

一维分布的样本  (1)

取一个目标分布:

定义如何从该分布中采样:

绘制随机样本的分布和直方图:

定义标量值生成器:

定义输出给定标量的分数的判别器:

创建一个 NetGANOperator,嵌入生成器和判别器,以对抗的方式训练它们:

创建一个数据生成器,生成隐随机变量和真实数据样本:

该数据生成器的样本:

为了监测 NetGANOperator 的训练,编写一个函数,来查看生成的样本:

查看 NetGANOperator 的随机初始化:

此图中,绿色曲线是目标分布,红色曲线是判别函数,橙色直方图表示生成的伪造数字的分布.

训练生成对抗网络并实时查看其性能:

查看已训练模型的生成:

生成数字并绘制直方图:

二维分布的样本  (1)

取目标二维分布:

绘制分布:

定义一个数字对生成器:

定义一个判别器,输出给定数字对的分数:

创建一个 NetGANOperator,嵌入生成器和判别器,以对抗的方式训练它们:

在某些数据上计算损失和生成的成对的点:

编写一个函数可视化 NetGANOperator 的生成器和判别器的性能:

进行的是随机初始化,生成的样本是随机的:

训练 NetGANOperator

训练后,生成的样本更符合目标分布:

生成数字的图像  (1)

取 MNIST 数据集的图像:

定义图像的二元判别器:

为大小相同的图像定义生成器:

定义一个数据生成器,给出随机种子和数字的采样图像:

定义一个函数,监测生成的图像的质量:

在随机初始化的 NetGANOperator 上试用该函数:

训练 NetGANOperator 生成图像,并查看训练过程中生成的图像:

从训练过的 NetGANOperator 中提取生成器,并用它来生成新的数字图像:

用 Cycle-GAN 将数字转换成另一个数字  (1)

获取两个不同数字的图像:

对一些随机图像进行采样:

取一个预训练过的图像分类器:

利用此预训练过的分类器定义二元判别器:

定义一个生成器,接受一幅图像,生成另一幅形状相同的图像:

定义 Cycle-GAN 结构,使用两个 NetGANOperator 和共享的生成器,将循环一致性损失添加到对抗性损失中:

定义一个函数,可视化生成的图像:

查看采用随机初始化生成的图像:

训练 Cycle-GAN:

属性和关系  (1)

考虑有几个生成器和判别器,以及相应的 NetGANOperator

NetGANOperator 中的生成器从判别器接收反梯度:

如果单独训练 NetGANOperator,在生成器之前或之后没有网络层,这等效于使用负的学习率乘子:

训练 NetGANOperator 相当于训练下面的 NetGraph

它还等价于下面的 NetGraph,其中有两处共享判别器:

Wolfram Research (2020),NetGANOperator,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetGANOperator.html.

文本

Wolfram Research (2020),NetGANOperator,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetGANOperator.html.

CMS

Wolfram 语言. 2020. "NetGANOperator." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/NetGANOperator.html.

APA

Wolfram 语言. (2020). NetGANOperator. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/NetGANOperator.html 年

BibTeX

@misc{reference.wolfram_2024_netganoperator, author="Wolfram Research", title="{NetGANOperator}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/NetGANOperator.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_netganoperator, organization={Wolfram Research}, title={NetGANOperator}, year={2020}, url={https://reference.wolfram.com/language/ref/NetGANOperator.html}, note=[Accessed: 22-November-2024 ]}