neural-network - Caffe:为什么Dropout层也存在于Deploy(测试)中?
问题描述
我明白 Dropout 是为了高效训练,避免过拟合和加速学习。但是,我不明白为什么我在部署(测试)中也看到了它?
我应该设置 dropout_ratio: 1.0 is testing 吗?
解决方案
TL;DR
不要触摸 dropout 层。Caffe 知道它在推理过程中不应该做任何事情。
"Dropout"
确实是对学习过程的一个非常强大的补充,并且在推理时似乎没有任何影响。
但是,如果您考虑一个幼稚的实现,其中在训练时仅将一些神经元设置为零,那么在测试时您必须通过缩放激活来补偿激活所有神经元(以获得相同的信号整体“强度”)。在这种情况下,推理时间"Dropout"
变成了一个简单的比例层(通过已知和固定的比例因子)。
幸运的是,更周到的实现将此缩放作为训练的一部分(即,将一些神经元设置为零,同时将其余神经元缩放为预定义的缩放因子),这样,在推理时"Dropout"
层绝对[无] [3]。
要了解有关"Dropout"
对训练稳定性的贡献及其对网络泛化能力的影响的更多信息,您可以阅读Bengio 的深度学习书的第 7.12 节。
推荐阅读
- scala - Akka Streams WebSocket 发送有关任意事件的信息
- android - 从 DB 到 ImageView 背景的字符串图像引用
- python - 如何使用按钮重新启动 Python GUI 程序?
- java - 编码和解码后字符串不同
- javascript - 使用 PHP 代码在 Javascript 中显示文本失败
- c# - 二进制操作 long vs int
- arrays - 自定义单元格在 TableView 中是全白的
- laravel - 用户 $user 在 Laravel 中做什么?
- node.js - nodejs api数据打印到网页而不是控制台
- java - 如何将 ObjectGraphMeasurer.measure(object) 的结果转换为字节?