1. 程式人生 > >【轉載】TensorFlow學習---tf.nn.dropout防止過擬合

【轉載】TensorFlow學習---tf.nn.dropout防止過擬合

轉載自:http://blog.csdn.net/huahuazhu/article/details/73649389   尊重原創

遇到tf.nn.dropout問題時,在網上看到這篇博文,覺得不錯,所以轉載方便自己以後學習,如侵犯版權,請告知博主刪除

一、 Dropout原理簡述:

tf.nn.dropout是TensorFlow裡面為了防止或減輕過擬合而使用的函式,它一般用在全連線層

Dropout就是在不同的訓練過程中隨機扔掉一部分神經元。也就是讓某個神經元的啟用值以一定的概率p,讓其停止工作,這次訓練過程中不更新權值,也不參加神經網路的計算。但是它的權重得保留下來(只是暫時不更新而已),因為下次樣本輸入時它可能又得工作了。示意圖如下:


但在測試及驗證中:每個神經元都要參加運算,但其輸出要乘以概率p。

二、tf.nn.dropout函式說明

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

上面方法中常用的是前兩個引數:

第一個引數x:指輸入

第二個引數keep_prob: 設定神經元被選中的概率,在初始化時keep_prob是一個佔位符,  keep_prob = tf.placeholder(tf.float32) 。tensorflow在run時設定keep_prob具體的值,例如keep_prob: 0.5

第五個引數name:指定該操作的名字。

三、使用舉例:

1dropout必須設定概率keep_prob,並且keep_prob也是一個佔位符,跟輸入是一樣的

1. keep_prob = tf.placeholder(tf.float32)  

2train的時候才是dropout起作用的時候,traintest的時候不應該讓dropout起作用

1. sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 0.5})  

1. train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob: 1})  

2. test_result = sess.run(merged, feed_dict={xs: X_test, ys: y_test, keep_prob: 1})