본문 바로가기

파이썬/머신러닝

[#E13] DROP OUT 이란?

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=[784512],
                     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=[512512],
                     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로 설정합니다. 이는 전체 뉴런을 모두 사용한다는 뜻입니다.