dropout(随机失活): 是为了解决深度神经网络的过拟合(overfitting)和梯度消失(gradient vanishing)而被提出的优化方法。
dropout是通过遍历神经网络每一层的节点,然后通过对该层的神经网络设置一个keep_prob(节点保留概率),即该层的节点有keep_prob的概率被保留,keep_prob的取值范围在0到1之间。通过设置神经网络该层节点的保留概率,使得神经网络不会去偏向于某一个节点(因为该节点有可能被删除),从而使得每一个节点的权重不会过大。
简单来说:随机失活就是让神经元以超参数keep_prob的概率被激活或者被设置为0。
dropout(
x,
keep_prob,
noise_shape=None,
seed=None,
name=None
)
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
x | 是 | tensor | 输出元素是 x 中的元素以 keep_prob 概率除以 keep_prob,否则为 0 |
keep_prob | 是 | scalar Tensor | dropout 的概率,一般是占位符 |
noise_shape | 否 | tensor | 默认情况下,每个元素是否 dropout 是相互独立。如果指定 noise_shape,若 noise_shape[i] == shape(x)[i],该维度的元素是否 dropout 是相互独立,若 noise_shape[i] != shape(x)[i] 该维度元素是否 dropout 不相互独立,要么一起 dropout 要么一起保留 |
seed | 否 | 数值 | 如果指定该值,每次 dropout 结果相同 |
name | 否 | string | 运算名称 |
代码示例:
import tensorflow as tf
a = tf.constant([1,2,3,4,5,6],shape=[2,3],dtype=tf.float32)
b = tf.placeholder(tf.float32)
c = tf.nn.dropout(a,b,[2,1],1) #noise_shape与a.shape的行大小相同,列不同,则行要么全为0,要么全不为0
# c = tf.nn.dropout(a,b,[1,3],1) #noise_shape与a.shape的列大小相同,行不同,则列要么全为0,要么全不为0
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(c,feed_dict={b:0.75}))
运行结果:
[[0. 0. 0. ]
[5.3333335 6.6666665 8. ]]