den*_*129 2 deep-learning keras tensorflow batch-normalization
考虑以下代码片段
model = models.Sequential()
model.add(layers.Dense(256, activation='relu')) # Layer 1
model.add(BatchNormalization())
model.add(layers.Dense(128, activation='relu')) # Layer 2
Run Code Online (Sandbox Code Playgroud)
我正在使用带有 Tensorflow 后端的 Keras。
我的问题是 - 在 Keras 的实现中,BN 是在激活函数之前还是之后执行?
为了增加清晰度,
BN 应该在激活之前还是之后应用存在争议,原始(Ioffe 和 Szegedy 2015)论文建议“之前”,但来自以下线程的评论显示了不同的意见。 批量标准化和辍学的顺序?
在 Keras 文档 ( https://keras.io/layers/normalization/ ) 中,它说“标准化每批上一层的激活,即应用保持平均激活接近 0 和激活标准偏差接近的转换到 1。”
Keras 的文档似乎表明 BN 在激活后应用(即在上面的示例代码中,BN 在第 1 层上的“relu”之后应用)。我想确认是否是这种情况?
另外,是否可以配置BN是在激活函数之前还是之后应用?
谢谢!
mlR*_*cks 10
在BatchNorm之后或之前添加activation仍然是一个公开的辩论。作者建议的原始版本运行良好,并已在许多实现中使用。但是很多人发现激活后的BN确实效果很好,有助于更快的收敛。例如,查看此线程中的讨论。
简而言之,这取决于任务!哪一个会表现得更好?你必须自己检查一下。是的,您可以控制订单。例如:
x = Conv2D(64, (3,3), activation=None)(inputs)
x = BatchNormalization()(x)
x = Activation("relu")(x)
Run Code Online (Sandbox Code Playgroud)
或者
x = Conv2D(64, (3,3), activation="relu")(inputs)
x = BatchNormalization()(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |