【发布时间】:2018-11-23 23:57:32
【问题描述】:
我了解 Dropout 是为了高效训练,避免过度拟合和加速学习。但是,我不明白为什么我在部署(测试)中也看到它?
我应该设置 dropout_ratio: 1.0 is testing?
【问题讨论】:
标签: neural-network deep-learning caffe conv-neural-network pycaffe
我了解 Dropout 是为了高效训练,避免过度拟合和加速学习。但是,我不明白为什么我在部署(测试)中也看到它?
我应该设置 dropout_ratio: 1.0 is testing?
【问题讨论】:
标签: neural-network deep-learning caffe conv-neural-network pycaffe
TL;DR
不要触摸 dropout 层。 Caffe 知道它在推理过程中不应该做任何事情。
"Dropout" 确实是对学习过程非常强大的补充,它似乎在推理时没有影响。
但是,如果您考虑一个幼稚的实现,其中在训练时仅将一些神经元设置为零,那么在测试时您必须通过缩放激活来补偿激活所有神经元(以获得相同的整体“信号强度”)。在这种情况下,推理时间"Dropout" 成为一个简单的比例层(通过已知和固定的比例因子)。
幸运的是,更周到的实现将此缩放作为训练的一部分(即,将一些神经元设置为零,同时将其余神经元缩放为预定义的scale factor),这方式,在推理时 "Dropout" 层绝对 [nothing][3]。
要详细了解"Dropout" 对训练稳定性的贡献及其对网络泛化能力的影响,您可以阅读Bengio's deep learning book 的第 7.12 节。
【讨论】:
"Dropout" 层进行训练,该层在训练期间进行缩放,那么您将完全从您的 deploy.prototxt 中删除 dropout。查看代码,caffe 确实将输入复制到输出,这是多余的,所以我想完全删除该层会稍微更有效率。