Caffe:为什么Dropout层也存在于Deploy(测试)中?
Caffe: why Dropout layer exists also in Deploy (testing)?
我理解Dropout是为了高效训练,避免过拟合和加速学习。但是,我不明白为什么我在部署(测试)中也看到它?
我应该设置 dropout_ratio: 1.0 正在测试吗?
TL;DR
不要触摸丢失层。 Caffe 知道它在推理期间什么都不应该做。
"Dropout"
确实是对学习过程的一个非常强大的补充,似乎 对推理时间没有影响。
但是,如果您考虑一种天真的实现,其中在训练时只将一些神经元设置为零,则在测试时您必须通过缩放激活来补偿激活 all 个神经元(以获得相同的总体 "strength" 信号)。在这种情况下,推理时间 "Dropout"
变成一个简单的比例层(通过已知和固定的比例因子)。
幸运的是,更深思熟虑的实现将这种缩放作为训练的一部分(也就是说,将一些神经元设置为零,并且 同时 将其余神经元缩放为预定义 scale factor), 这样,在推理时间 "Dropout"
层绝对 [nothing][3].
要详细了解 "Dropout"
对训练稳定性的贡献及其对网络泛化能力的影响,您可以阅读 Bengio's deep learning book.
的第 7.12 节
我理解Dropout是为了高效训练,避免过拟合和加速学习。但是,我不明白为什么我在部署(测试)中也看到它?
我应该设置 dropout_ratio: 1.0 正在测试吗?
TL;DR
不要触摸丢失层。 Caffe 知道它在推理期间什么都不应该做。
"Dropout"
确实是对学习过程的一个非常强大的补充,似乎 对推理时间没有影响。
但是,如果您考虑一种天真的实现,其中在训练时只将一些神经元设置为零,则在测试时您必须通过缩放激活来补偿激活 all 个神经元(以获得相同的总体 "strength" 信号)。在这种情况下,推理时间 "Dropout"
变成一个简单的比例层(通过已知和固定的比例因子)。
幸运的是,更深思熟虑的实现将这种缩放作为训练的一部分(也就是说,将一些神经元设置为零,并且 同时 将其余神经元缩放为预定义 scale factor), 这样,在推理时间 "Dropout"
层绝对 [nothing][3].
要详细了解 "Dropout"
对训练稳定性的贡献及其对网络泛化能力的影响,您可以阅读 Bengio's deep learning book.