在写系统时候遇到一个问题:模仿的版本在测试阶段,把所有权重乘以一个保留概率(做法1)。而GJH他看的Keras里面测试阶段什么都不做(做法2),所以比较好奇,怎么做法不同?
但是随手搜了几个中文博客,都是按做法1来的,训练阶段按保留概率随机生成一个保留矩阵(元素要么0-丢弃,要么1-保留),然后测试阶段所有权重乘以保留概率。
在回头看TensorFlow的Dropout函数https://www.tensorflow.org/api_docs/python/tf/nn/dropout,怎么涉及一个scale操作,懵了:
With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0. The scaling is so that the expected sum is unchanged.
Google了下,找到类似的疑惑提问:

本文探讨了深度学习中Dropout策略的两种实现方式,一种是在训练时对保留的单元进行缩放并乘以1/keep_prob,测试时不作处理;另一种是训练时不缩放,测试时乘以保留概率p。这两种方法在适当调整学习率和权重初始化时等效。 Dropout的使用有助于防止过拟合,并强调阅读原始论文的重要性。
最低0.47元/天 解锁文章
1143

被折叠的 条评论
为什么被折叠?



