神经网络中的dropout以及eval()模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络中的dropout以及eval()模式相关的知识,希望对你有一定的参考价值。
参考技术A 在知乎( https://zhuanlan.zhihu.com/p/23178423 )和博客园( https://www.cnblogs.com/king-lps/p/8570021.html )分别看到解释dropout和模块的两种模式(train训练模式,eval测试/评估模式)的文章,写的很明了,总结一下自己的更加通俗易懂的理解。dropout是用来解决神经网络训练过程中的过拟合问题(over-fitting),因为当训练集的数量不多而网络参数相对多时,训练样本误差带来的影响很大,拟合的过程中强行逼近到了误差值。因此在每一层神经网络中引入dropout,具体的实现过程是在每次更新参数的过程中,随机的剔除掉部分(按照比例参数p)神经元,不对其参数进行更新。
那么为什么dropout能够有效解决overfitting的问题呢?
接下来说两种模式,神经网络模块存在两种模式,train模式(net.train())和eval模式(net.eval())。一般的神经网络中,这两种模式是一样的,只有当模型中存在dropout和batchnorm的时候才有区别。比如针对上图中的训练网络,四层有三层进行了dropout,这是为了训练出更加准确的网络参数,一旦我们用测试集进行结果测试的时候,一定要使用net.eval()把dropout关掉,因为这里我们的目的是测试训练好的网络,而不是在训练网络,没有必要再dropout。
以上是关于神经网络中的dropout以及eval()模式的主要内容,如果未能解决你的问题,请参考以下文章
pytorch踩坑之model.eval()和model.train()输出差距很大
dropout是什么?为什么dropout管用?测试集上是否需要使用dropout?说明为什么神经网络中的dropout可以作为正则化?