一:適用範圍:網絡
tf.nn.dropout是TensorFlow裏面爲了防止或減輕過擬合而使用的函數,它通常用在全鏈接層函數
二:原理:測試
dropout就是在不一樣的訓練過程當中隨機扔掉一部分神經元。也就是讓某個神經元的激活值以必定的機率p,讓其中止工做,此次訓練過程當中不更新權值,也不參加神經網絡的計算。可是它的權重得保留下來(只是暫時不更新而已),由於下次樣本輸入時它可能又得工做了spa
三:函數介紹:code
tf.nn.drop(x, keep_prob, noise_shape=None, seed=None,name=None)blog
x: 輸入值utf-8
keep_prob: float類型,每一個元素被保留下來的機率it
noise_shape: 一個1維的int32張量,表明了隨機產生「保留/丟棄」標誌的shapeio
四:舉例說明:class
# -*- coding: utf-8 -*- # @Time : 18-5-27 下午3:34 # @Author : payneLi # @Email : lph0729@163.com # @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.]]