详解tf.nn.dropout

tf.nn.dropout

tensoflow中有两个dropout函数容易混淆
1、tf.nn.dropout 中参数 keep_prob :每一个元素被保存下的概率。
2、tf.layer.dropout 中参数 rate :每一个元素丢弃的概率。keep_prob = 1 - rate
tf.layers.drop函数定义如下:

tf.layers.dropout(inputs,rate=0.5,noise_shape=None,seed=None,training=False,name=None)

在 tf.layer.dropout 中有一个 training 参数:在training=True时,返回应用dropout后的输出;在training=False时,正常返回输出(没有dropout)。一般在training过程training=true,即启动dropout,在每次迭代都rate比例的神经元。

tf.nn.dropout是tensorflow常用的函数,它的作用是为了减轻过拟合带来的问题而使用的函数,它一般用在每个连接层的输出。
Dropout就是在不同的训练过程中,按照一定概率使得某些神经元停止工作。也就是让每个神经元按照一定的概率停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重依然存在,下次更新时可能会使用到它。
  神经网络在训练过程中,可以无限逼近一段非线性连续函数,但是如果模型网络层数过多或设置的足够复杂,在训练时会出现过拟合(overfitting),就像下图这样。
在这里插入图片描述图中蓝色的线,为了可以涉及到每个点,呈现出了过拟合现象。
尽管它很好的拟合了每一个点的位置,但是曲线是歪歪曲曲,这个的曲线不具有良好的鲁棒性,不是我们想要的结果,在实际工程实验中,我们更希望得到如黑色线一样的曲线。

tf.nn.dropout函数介绍

def dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

**x:**上一层传下载的tensor。(一般用于全连接层后面)
keep_prob:保留keep_prob的神经元继续工作,其余的停止工作与更新。(在这里并不是真正被丢掉,而是在这一轮的训练中不更新这个神经元的权值,权值在这一轮训练被保留,下一轮训练可能又会被更新。)
**seed:**整形变量,随机数种子。
**name:**指定dropout操作的名字
注意:

1、dropout必须设置概率keep_prob,keep_prob应初始化为占位符placeholder。定义如下:

keep_prob = tf.placeholder(tf.float32)  
h_drop = tf.nn.dropout(encoded, keep_prob)

2、train的时候才是dropout起作用的时候,test的时候不应该让dropout起作用。

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值