发布网友 发布时间:2023-01-12 20:05
共1个回答
热心网友 时间:2023-11-02 04:14
Dropout这个概念已经推出4年了,它的详细描述见论文 。可是呢,它仿佛是个犹抱琵琶半遮面的美女,难以捉摸!!许多文献都对dropout有过描述,但解释的含糊不清,这里呢,我也不打算解释清楚,只是通过tensorflow来看一看dropout的运行机理。
文章分两部分,第一部分介绍tensorflow中的dropout函数,第二部分是我的思考
首先看官方函数定义:
输入是:
输出是:
然后我们看看官方API是怎么说这个函数的:
注意,输出的非0元素是原来的 “1/keep_prob” 倍!说了这么多,下面给一个程序例子:
运行的结果如下:
分析一下运行结果:
特点分析完毕,小总结一下,dropout这个概念看起来好高大上,然而在程序中实现竟然如此简单!说白了,tensorflow中的dropout就是:使输入tensor中某些元素变为0,其它没变0的元素变为原来的1/keep_prob大小!
首先引用此篇博文 的话:
然后,我就自己试了试,看看小型网络中dropout效果到底怎么样,程序片段如下:
网络很简单,形如 784-30-10 的一个网络,只不过在输出层前用dropout处理了一下,训练的数据是MNIST的手写数据集,然后你猜怎么着?采用dropout以后的训练精度不升反降,后来我把网络隐藏层改成100个神经元,结果依旧,看来,我的网络还是太小了,真的如上面那篇博客所说,dropout用不好的话,真是个累赘!