【发布时间】:2019-09-13 14:37:54
【问题描述】:
考虑下面的代码sn-p
model = models.Sequential()
model.add(layers.Dense(256, activation='relu')) # Layer 1
model.add(BatchNormalization())
model.add(layers.Dense(128, activation='relu')) # Layer 2
我正在使用带有 Tensorflow 后端的 Keras。
我的问题是 - 在 Keras 的实现中,BN 是在激活函数之前还是之后执行的?
为了更加清晰,
BN 应该在激活之前还是之后应用尚有争议,最初的 (Ioffe and Szegedy 2015) 论文建议“BEFORE”,但来自以下线程的 cmets 显示了不同的意见。 Ordering of batch normalization and dropout?
在 Keras 文档 (https://keras.io/layers/normalization/) 中,它说 “在每批中标准化前一层的激活,即应用保持平均激活接近 0 和激活标准偏差接近 1 的变换。”
Keras 的文档似乎建议 BN 在激活后应用(即在上面的示例代码中,BN 在第 1 层的“relu”之后应用)。我想确认一下是不是这样?
另外,是否可以配置在激活函数之前或之后应用BN?
谢谢!
【问题讨论】:
标签: tensorflow keras deep-learning batch-normalization