TF-tf.nn.dropout介绍
官方的接口是这样的
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)
根据给出的keep_prob参数,将输入tensor x按比例输出。
x : 输入tensor
keep_prob : float类型,每个元素被保留下来的概率
noise_shape : 一个1维的int32张量,代表了随机产生“保留/丢弃”标志的shape。
seed : 整形变量,随机数种子。
name : 名字,没啥用。
一、无noise_shape的情况
一个神经元将以概率keep_prob决定是否放电,如果不放电,那么该神经元的输出将是0,如果该神经元放电,那么该神经元的输出值将被放大到原来的1/keep_prob倍。
上面这句话详细解释为:a中每个元素将以keep_prob的概率决定是否输出,如果不输出那么这个元素就是0;如果输出,为了补偿之前没输出的能量,所以如果一旦输出就把能量变成原来的1/keep_prob倍。
二、有noise_shape的情况
默认情况下,每个神经元是否放电是相互独立的。比如上面的5个元素就是相互独立的,没有影响的。但是,如果noise_shape被修改了,那么他对于变量x就是一个广播形式,而且当且仅当noise_shape[i] == shape(x)[i],x中的元素是相互独立的。比如,shape(x) = [k, l, m, n], noise_shape = [k, 1, 1, n] ,那么每个批和通道都是相互独立的,但是每行和每列的数据都是关联的,即要不都为0,要不就是原来值的1/keep_prob倍。
注意:
1、dropout必须设置概率keep_prob,keep_prob应初始化为占位符placeholder。如:
keep_prob = tf.placeholder(tf.float32)
2、train的时候才是dropout起作用的时候,test的时候不应该让dropout起作用。