1

新手進行深度學習。 使用gogoel tensorflow(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py)中的MNIST_SOFTMAX.py教程,我添加了兩個新圖層來查看發生了什麼。在tensorflow中添加更多圖層MNIST教程使精度下降

x = tf.placeholder(tf.float32, [None, 784]) 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 
y = tf.matmul(x, W) + b 

更改上面的代碼到

x = tf.placeholder(tf.float32, [None, 784]) 
W1 = tf.Variable(tf.zeros([784, 256])) 
W2 = tf.Variable(tf.zeros([256, 256])) 
W3 = tf.Variable(tf.zeros([256, 10])) 

B1 = tf.Variable(tf.zeros([256])) 
B2 = tf.Variable(tf.zeros([256])) 
B3 = tf.Variable(tf.zeros([10])) 

Y1 = tf.matmul(x, W1) + B1 
Y2 = tf.matmul(Y1, W2) + B2 
Y3 = tf.matmul(Y2, W3) + B3 
y = Y3 

降至精度從0.9188到0.1028。我可以弄清楚爲什麼會下降。

+0

也許相關:[帶有隱藏層的神經網絡表現比沒有更差](http://stats.stackexchange.com/questions/181771/neural-net-with-hidden-layer-performing-worse-than-without) – blacksite

+0

你可以在某處發佈完整的代碼嗎?我想看看你如何訓練。隨機梯度下降? –

+0

代碼https://github.com/jeongsoopark/MachineLearning/blob/master/mnist_softmax.py 我只改變了張量流的默認層結構MNIST_softmax.py – jspark

回答

3

我認爲你需要同時symmetry breaking in the weights與層之間的非線性激活:

W = tf.Variable(tf.random_normal([784, 256], stddev=0.1)) 
W1 = tf.Variable(tf.random_normal([256, 256], stddev=0.1)) 
W2 = tf.Variable(tf.random_normal([256, 10], stddev=0.1)) 
b = tf.Variable(tf.zeros([256])) 
b1 = tf.Variable(tf.zeros([256])) 
b2 = tf.Variable(tf.zeros([10])) 

y = tf.matmul(x, W) + b 
y = tf.nn.relu(y) 
y = tf.matmul(y, W1) + b1 
y = tf.nn.relu(y) 
y = tf.matmul(y, W2) + b2 

那得到的0.9653準確性。

+0

謝謝。它使得多層網絡比單層更好。 – jspark

1

您需要在圖層之間添加非線性激活函數。試試ReLU。

+0

'Y1 = tf.nn.relu(tf.matmul(x, W1)+ B1)' 'Y2 = tf.nn.relu(tf.matmul(Y1,W2)+ B2)' 'Y3 = tf.matmul(Y2,W3)+ B3' 我試過但是得到0.1135準確性 – jspark

+0

試圖繪製你的損失函數與迭代。損失函數應該穩步下降。 – stackoverflowuser2010

2

您遇到的問題與this post中的回答相同。從本質上講,你的第一個隱藏層比上一個學習要慢得多。通常你的網絡應該學習正確的權重。然而,在這裏,第一層中的權重很可能變化很小,並且錯誤傳播到下一層。它太大了,以至於後面的層無法糾正它。檢查重量。

+0

固定W,B初始化與random_normal修復它,準確性= 0.89。這仍然低於單層版本。但是現在看起來像你指出的@Lukasz Tracewski那樣正在消失的漸變問題。謝謝 – jspark

+0

如果我想做一個猜測,那是因爲你的神經網絡實際上可以通過調整第二層和隨後的層來隨機加權。它還更糟糕,因爲它必須處理第一個隱藏層「噪音」,這很難學習「正確」的權重。 –