TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题

Posted payneLi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题相关的知识,希望对你有一定的参考价值。

一:适用范围:

  tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层

二:原理:

  dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了

三:函数介绍:

  tf.nn.drop(x,  keep_prob, noise_shape=None, seed=None,name=None)

  x:  输入值

  keep_prob: float类型,每个元素被保留下来的概率

  noise_shape: 一个1维的int32张量,代表了随机产生“保留/丢弃”标志的shape

四:举例说明:

# -*- coding: utf-8 -*-
# @Time    : 18-5-27 下午3:34
# @Author  : payneLi
# @Email   : [email protected]
# @File    : tf_nn_dropout.py

import tensorflow as tf
import numpy as np

"""
测试Tensor经过dropout()的效果:
    1.输入与输出的Tensor的shape相同;
    2.随机使某些元素值为0,非零元素为:对应值/keep_prob
"""
dropout = tf.placeholder(tf.float32)
x = tf.reshape(np.array(range(36), dtype=np.float32), [6, 6])
y = tf.nn.dropout(x, dropout)
print(x, y)

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(x))
    print(sess.run(y, feed_dict={dropout: 0.5}))

----> 运行结果:
  x :

    [[ 0. 1. 2. 3. 4. 5.]
    [ 6. 7. 8. 9. 10. 11.]
    [12. 13. 14. 15. 16. 17.]
    [18. 19. 20. 21. 22. 23.]
    [24. 25. 26. 27. 28. 29.]
    [30. 31. 32. 33. 34. 35.]]

  y :   

    [[ 0. 0. 4. 6. 8. 0.]
    [ 0. 0. 16. 0. 20. 22.]
    [24. 26. 28. 0. 0. 0.]
    [ 0. 38. 40. 0. 44. 46.]
    [48. 0. 0. 54. 56. 58.]
    [60. 0. 0. 66. 68. 0.]]

以上是关于TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题的主要内容,如果未能解决你的问题,请参考以下文章

TF-tf.nn.dropout介绍

tf.nn.dropout()介绍

tf.nn.dropout

TensorFlow框架之变量OP

Tensorflow之CIFAR-10介绍

TensorFlow篇--Tensorflow框架可视化之Tensorboard