who*_*olt 9 python machine-learning conv-neural-network tensorflow batch-normalization
我有以下架构:
Conv1
Relu1
Pooling1
Conv2
Relu2
Pooling3
FullyConnect1
FullyConnect2
Run Code Online (Sandbox Code Playgroud)
我的问题是,我在哪里应用批量标准化?在 TensorFlow 中执行此操作的最佳功能是什么?
ske*_*r88 14
关于这个问题存在一些争论。这个 Stack Overflow 线程和这个 keras 线程就是争论的例子。Andrew Ng 表示,批量归一化应该在当前层的非线性之前立即应用。BN论文的作者也这么说,但是现在根据keras线程上的Fran\xc3\xa7ois Chollet的说法,BN论文作者在激活层之后使用了BN。另一方面,有一些基准测试,例如在 torch-residual-networks github 问题上讨论的基准测试,表明 BN 在激活层之后表现更好。
\n\n我目前的观点(欢迎更正)是,你应该在激活层之后进行 BN,如果你有预算并且想要挤出额外的准确率,请在激活层之前尝试。
\n\n因此,向 CNN 添加批量归一化将如下所示:
\n\nConv1\nRelu1\nBatchNormalization\nPooling1\nConv2\nRelu2\nBatchNormalization\nPooling3\nFullyConnect1\nBatchNormalization\nFullyConnect2\nBatchNormalization\nRun Code Online (Sandbox Code Playgroud)\n
原始批规范论文规定在 ReLU 激活之前使用批规范。但有证据表明,在激活后使用 batchnorm 可能更好。这是Francois Chollet对Keras GitHub的评论:
...我可以保证最近由 Christian [Szegedy] 编写的代码在 BN 之前应用了 relu。不过,它仍然偶尔会成为争论的话题。
对于您的第二个问题:在 tensorflow 中,您可以使用高级tf.layers.batch_normalization函数或低级tf.nn.batch_normalization.
| 归档时间: |
|
| 查看次数: |
4998 次 |
| 最近记录: |