[텐서플로우] dropout의 적용

드롭아웃 기법 : 신경망의 일부만 사용하도록 하여 가중치의 균형을 잡고 과적합 상태를 해결함.

keep_prob = tf.placeholder(tf.float32)
W1 = tf.Variable(tf.random_normal([784, 256], stddev=0.01))
L1 = tf.nn.relu(tf.matmul(X, W1))
L1 = tf.nn.dropout(L1, keep_prob) 

W2 = tf.Variable(tf.random_normal([256, 256], stddev=0.01))
L2 = tf.nn.relu(tf.matmul(L1, W2))
L2 = tf.nn.dropout(L2, keep_prob) 

W3 = tf.Variable(tf.random_normal([256, 10], stddev=0.01))
model = tf.matmul(L2, W3) # 출력층에는 활성화 함수 사용하지 않음.

_, cost_val = sess.run([optimizer, cost], feed_dict={X:batch_xs, Y: batch_ys, keep_prob: 0.8}) # 뉴런의 80%만 사용
#예측시에는 dropout을 적용하지 아니한다.
print('정확도:', sess.run(accuracy, feed_dict={X: mnist.test.images, Y: mnist.test.labels, keep_prob: 1}))

 

You may also like...

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.