gan 总结 数据增强_提高GAN训练稳定性的9大tricks

2de16f91192825dec016360a50ba78f6.png
关注微信公众号:人工智能前沿讲习
重磅干货,第一时间送达

尽管 GAN 领域的进步令人印象深刻,但其在应用过程中仍然存在一些困难。本文梳理了 GAN 在应用过程中存在的一些难题,并提出了最新的解决方法。

使用 GAN 的缺陷

众所周知,GAN 是由 Generator 生成网络和 Discriminator 判别网络组成的。

1. Mode collapse(模型崩溃)

注:Mode collapse 是指 GAN 生成的样本单一,其认为满足某一分布的结果为 true,其他为 False,导致以上结果。

自然数据分布是非常复杂,且是多峰值的(multimodal)。也就是说数据分布有很多的峰值(peak)或众数(mode)。每个 mode 都表示相似数据样本的聚集,但与其他 mode 是不同的。

在 mode collapse 过程中,生成网络 G 会生成属于有限集 mode 的样本。当 G 认为可以在单个 mode 上欺骗判别网络 D 时,G 就会生成该 mode 外的样本。

6ea7bfe3447b6f6b5a2d00bc70cacec4.png
上图表示 GAN 的输出没有 mode collapse. 下图则出现了 mode collapse。

判别网络最后会判别来自该 mode 的样本是假的。最后,生成网络 G 会简单地锁定到另一个 mode。该循环会无限进行,就会限制生成样本的多样性。

2. Convergence(收敛)

GAN 训练过程中遇到的一个问题是什么时候停止训练?因为判别网络 D 损失降级会改善生成网络 G 的损失(反之亦然),因此无法根据损失函数的值来判断收敛,如下图所示:

c8718e1b7a6f7db63ddf31f96dc9ab51.png
典型的GAN损失函数图。注意该如何从这个图中解释收敛性。

3. Quality(质量)

与前面提

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`numpy.stride_tricks` 模块提供了一组用于创建非常大的数组(例如图像或音频信号)的工具。它允许我们使用相对较小的数组来表示大型数组,而不必完全复制数据。 下面是 `numpy.stride_tricks` 的一些常见用法: 1. 使用 `numpy.lib.stride_tricks.as_strided()` 函数创建一个数组视图,该视图表示具有不同步幅度的原始数组的子集。例如,给定一个 3D 数组,我们可以创建一个新的 2D 数组视图,其中每个行都是原始数组中的一个 2D 子集。 ```python import numpy as np def rolling_window(a, window): shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) strides = a.strides + (a.strides[-1],) return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) a = np.array([1, 2, 3, 4, 5]) rolling_window(a, window=3) ``` 输出: ``` array([[1, 2, 3], [2, 3, 4], [3, 4, 5]]) ``` 2. 使用 `numpy.lib.stride_tricks.broadcast_arrays()` 函数来将多个数组广播到相同的形状。例如,给定两个形状不同的数组,我们可以将它们广播到相同的形状,然后对它们进行元素级别的操作。 ```python import numpy as np a = np.array([1, 2, 3]) b = np.array([[4], [5], [6]]) broadcast_a, broadcast_b = np.lib.stride_tricks.broadcast_arrays(a, b) print(broadcast_a) print(broadcast_b) ``` 输出: ``` array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]) array([[4, 4, 4], [5, 5, 5], [6, 6, 6]]) ``` 3. 使用 `numpy.lib.stride_tricks.sliding_window_view()` 函数创建一个数组视图,该视图表示具有相同步幅的原始数组的子集。例如,给定一个 3D 数组,我们可以创建一个新的 2D 数组视图,其中每个子集都是原始数组的滑动窗口。 ```python import numpy as np a = np.array([1, 2, 3, 4, 5]) window_size = 3 sliding_window = np.lib.stride_tricks.sliding_window_view(a, window_size) print(sliding_window) ``` 输出: ``` array([[1, 2, 3], [2, 3, 4], [3, 4, 5]]) ``` 这些仅仅是 `numpy.stride_tricks` 的一些常见用法。对于更多有关此模块的信息,可以查看 [NumPy 官方文档](https://numpy.org/doc/stable/reference/generated/numpy.lib.stride_tricks.html)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值