1. 文章
  2. 文章详情

TensorFlow框架Dropout函数

TensorFlow框架Dropout函数

神经网络训练中防止过拟合的一种技术

在正则化方法中,Dropout 是非常有用和成功的一种技术,能够有效控制过拟合(overfitting)Definitely问题。一般来说,Dropout 会随机删除一些神经元,以在不同批量上训练不同的神经网络架构。Bagging 是通过结合多个模型降低泛化误差的技术,主要的做法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。而 Dropout 可以被认为是集成了大量深层神经网络的 Bagging 方法,因此它提供了一种廉价的 Bagging 集成近似方法,能够训练和评估指数级数量的神经网络。

具体来说,Dropout 指暂时丢弃一部分神经元及其连接。随机丢弃神经元可以防止过拟合,同时指数级、高效地连接不同网络架构。神经元被丢弃的概率为 1 − keep_prob,且关闭的神经元不参与前向传播计算与参数更新。隐藏层通常以 0.5 的概率丢弃神经元。使用完整网络(每个节点的输出权重为 p)对所有 2^n 个 dropout 神经元的样本平均值进行近似计算。每当我们关闭一些神经元,我们实际上修改了原模型的结构,那么每次迭代都训练一个不同的架构,参数更新也更加关注激活的神经元。这种正则化方法可以看成是一种集成方法,即集成每个批量所训练的不同网络架构。Dropout 显著降低了过拟合,同时通过避免在训练数据上的训练节点提高了算法的学习速度。

import tensorflow as tf

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    d = tf.constant([
                        [[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [13., 14., 15., 16.]],
                        [[1., 2., 3., 4.], [5., 6., 7., 8.], [9., 10., 11., 12.], [13., 14., 15., 16.]]
                    ])

    after_dropout = tf.nn.dropout(d, 0.8)
    result = sess.run(after_dropout)
    print(result)

打印结果为:
[[[ 1.25 2.5 3.75 5. ]
[ 6.25 7.5 8.75 10. ]
[ 11.25 12.5 0. 15. ]
[ 0. 0. 18.75 20. ]]

[[ 1.25 2.5 3.75 5. ]
[ 6.25 0. 8.75 10. ]
[ 0. 0. 13.75 0. ]
[ 0. 17.5 18.75 0. ]]]

dropout为0.8的作用为:将所有元素除以0.8,然后随机挑选20%的数值,将这些数值设置为0。

发表评论

登录后才能评论

评论列表(0条)