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]) 
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 

에 상기

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 

변경된 코드는 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 나는 단지 tensorflow의 기본 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, Y3 = tf.matmul (Y2, W3) + B3' 'Y2 = tf.nn.relu (tf.matmul (Y1, W2) + B2)' 'Y3 = tf.matmul (Y2, W3) + B3' 시도했지만 0.1135 정확도 – jspark

+0

손실 함수 대 반복을 플로팅하는 중입니다. 손실 함수는 꾸준히 감소해야합니다. – stackoverflowuser2010

2

this post과 같은 문제가 발생합니다. 기본적으로 숨겨진 첫 번째 레이어는 마지막보다 훨씬 느리게 학습합니다. 일반적으로 네트워크는 올바른 가중치를 알아야합니다. 그러나 여기서는 첫 번째 레이어의 가중치가 거의 변하지 않고 오류가 다음 레이어로 전파됩니다. 그것은 너무 커서 후속 레이어가이를 수정할 수 없습니다. 무게를 확인하십시오.

+0

random_normal로 W를 고정하고 B를 초기화하면 정확도가 0.89가됩니다. 이는 단층 버전보다 여전히 낮습니다. 그러나 이제는 @Lukasz Tracewski가 지적한 것처럼 사라지는 그라데이션 문제가있는 것 같습니다. 감사합니다 – jspark

+0

만약 당신의 신경 네트워크가 실제로 두 번째 및 후속 레이어를 조정하여 임의의 가중치와 함께 작동 할 수 있기 때문에 추측을해야합니다. 그것은 "오른쪽"무게를 배우는 어려움을 가지고있는 첫 번째 숨겨진 레이어 "노이즈"를 다루어야하기 때문에 더 나쁩니다. 덕분에 –