一、 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:指定該操作的名字。
三、使用舉例:
1、dropout必須設定機率keep_prob,并且keep_prob也是一個占位符,跟輸入是一樣的
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)
2、train的時候才是dropout起作用的時候,train和test的時候不應該讓dropout起作用
sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob:
0.5})
train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob: 1})
test_result = sess.run(merged, feed_dict={xs: X_test, ys: y_test, keep_prob: 1})