Python 如何在Tensorflow中使用SWA实现批量定额?

Python 如何在Tensorflow中使用SWA实现批量定额?,python,tensorflow,neural-network,batch-normalization,Python,Tensorflow,Neural Network,Batch Normalization,我在Tensorflow 2.2中使用随机加权平均(SWA)和批量标准化层。对于批量规范,我使用tf.keras.layers.BatchNormalization。对于SWA,我使用自己的代码来平均权重(我在出现tfa.optimizers.SWA之前编写了代码)。我从多个来源中了解到,如果使用批次标准和SWA,我们必须向前传递,以使某些数据(运行激活权重和/或动量值的平均值和st-dev?)可用于批次标准层。尽管读了很多书,但我不明白的是到底需要做什么以及如何做。具体而言: 何时必须运行正向

我在Tensorflow 2.2中使用随机加权平均(SWA)和批量标准化层。对于批量规范,我使用
tf.keras.layers.BatchNormalization
。对于SWA,我使用自己的代码来平均权重(我在出现
tfa.optimizers.SWA
之前编写了代码)。我从多个来源中了解到,如果使用批次标准和SWA,我们必须向前传递,以使某些数据(运行激活权重和/或动量值的平均值和st-dev?)可用于批次标准层。尽管读了很多书,但我不明白的是到底需要做什么以及如何做。具体而言:

  • 何时必须运行正向/预测过程?在每节课结束时 小批量,每个时代结束,所有训练结束
  • 运行正向传递时,如何使用运行平均值和stdev值 到批次标准层
  • 这个过程是由
    tfa.optimizers.SWA
    类神奇地执行的吗
  • 何时必须运行正向/预测过程?在每节课结束时 小批量,每个时代结束,所有训练结束

    在训练结束时。这样想,SWA是通过将最终重量与跑步平均值进行交换来执行的。但所有批次标准层仍基于旧权重的统计信息进行计算。所以我们需要向前传球让他们赶上

    运行正向传递时,运行的平均值和stdev值如何 是否提供给批次标准层

    在正常向前传球(预测)期间,运行平均值和标准偏差不会更新。所以我们实际上需要做的是训练网络,而不是更新权重。这就是论文中提到的在“训练模式”下向前传球

    实现这一点的最简单方法(我知道)是重置批处理规范化层,并在学习率设置为0的情况下再训练一个历元

    这个过程是由tfa.optimizers.SWA类神奇地执行的吗

    我不知道。但是如果你使用的是Tensorflow Keras,那么我在论文中做了这个,包括学习率表