【问题标题】:How implement Batch Norm with SWA in Tensorflow?如何在 Tensorflow 中使用 SWA 实现 Batch Norm?
【发布时间】:2021-05-03 03:49:35
【问题描述】:
我在 Tensorflow 2.2 中使用带有批量标准化层的随机权重平均 (SWA)。对于批量标准,我使用tf.keras.layers.BatchNormalization。对于 SWA,我使用自己的代码来平均权重(我在出现 tfa.optimizers.SWA 之前编写了代码)。我在多个来源中读到,如果使用批量规范和 SWA,我们必须运行前向传递以使某些数据(激活权重和/或动量值的运行平均值和标准偏差?)可用于批量规范层。我不明白 - 尽管阅读了很多 - 正是需要做什么以及如何做。具体来说:
- 什么时候必须运行前向/预测通道?在每个结束时
mini-batch,每个 epoch 结束,所有训练结束?
- 运行前向传递时,运行均值和标准差值如何可用
到批量规范层?
- 这个过程是由
tfa.optimizers.SWA 类神奇地执行的吗?
【问题讨论】:
标签:
python
tensorflow
neural-network
batch-normalization
【解决方案1】:
什么时候必须运行前向/预测通道?在每个结束时
mini-batch,每个 epoch 结束,所有训练结束?
训练结束时。可以这样想,SWA 是通过将最终权重与运行平均值交换来执行的。但是所有的批范数层仍然是根据旧权重的统计数据计算的。所以我们需要向前传球让他们追上来。
运行前向传递时,运行均值和标准差值如何
可用于批处理规范层?
在正常的前向传递(预测)期间,不会更新运行平均值和标准差。所以我们真正需要做的是训练网络,而不是更新权重。这就是论文所说的以“训练模式”运行前向传递时所指的内容。
实现这一点的最简单方法(据我所知)是重置批量归一化层并训练一个额外的 epoch,并将学习率设置为 0。
这个过程是由 tfa.optimizers.SWA 类神奇地执行的吗?
我不知道。但是,如果您使用的是 Tensorflow Keras,那么我已经制作了这个 Keras SWA callback,它就像在论文中一样,包括学习率时间表。