1. 程式人生 > >TensorFlow之tf.nn.dropout():防止模型訓練過程中的過擬合問題

TensorFlow之tf.nn.dropout():防止模型訓練過程中的過擬合問題

AC -- 輸出 array 全連接 spa () 激活 odin

一:適用範圍:

  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():防止模型訓練過程中的過擬合問題