DROP OUT은 데이터 전처리 방법 [#E9 : 학습 데이터 전처리(PreProcessing)] 과 비슷하게 학습이 잘 작동하도록 도와주는 모델입니다.
이것은 다음 사진과 같이 작동합니다.
레이어를 깊게 쌓으면 그림 (a)와 같이 NN (Neural Network)는 복잡한 뉴런을 가지게 됩니다. DROP OUT은 고의로 랜덤한 뉴런을 누락시킨 후 학습을 시작합니다.
일단 학습이 끝나면 다시 (a) 그대로 학습하여 효율성 및 정확도를 높여줄 수 있습니다.
DROP OUT은 다음과 같이 구현합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | dropout_rate = tf.placeholder("float") W1 = tf.get_variable("W1", shape=[784, 512], initializer=tf.contrib.layers.xavier_initializer()) b1 = tf.Variable(tf.random_normal([512])) L1 = tf.nn.relu(tf.matmul(X, W1) + b1) L1 = tf.nn.dropout(L1, dropout_rate) W2 = tf.get_variable("W2", shape=[512, 512], initializer=tf.contrib.layers.xavier_initializer()) b2 = tf.Variable(tf.random_normal([512])) L2 = tf.nn.relu(tf.matmul(L1, W2) + b2) L2 = tf.nn.dropout(L2, dropout_rate) ... //Train sess.run(optimizer), feed_dict={X: x_data, Y: y_data, dropout_rate: 0.7} //Evalutaion print(......., dropout_rate: 1) | cs |
학습과정에서 dropout_rate는 사용자 임의로 설정하는데, 이는 누락시킬 랜덤한 뉴런의 비율입니다. 기본값은 보통 은 0.5입니다.
평가과정에서 dropout_rate는 정확한 결과를 위해 반드시 1로 설정합니다. 이는 전체 뉴런을 모두 사용한다는 뜻입니다.
'파이썬 > 머신러닝' 카테고리의 다른 글
[#E15] MNIST 데이터란? (0) | 2018.12.14 |
---|---|
[#E14] 머신러닝 팁과 용어 해석 (0) | 2018.12.11 |
[#E12] W 변수 (Weights) 초기화 방법 (0) | 2018.12.10 |
[#E11] Vanishing Gradient와 ReLU (0) | 2018.12.10 |
[#E10] 딥러닝의 기초 XOR 문제란? (0) | 2018.12.08 |