티스토리 뷰

Overfitting이 되었는지 안되었는지 어떻게 알 수 있을까?

학습데이터를 가지고 accuracy를 측정해봤더니 높은 확률이 나왔는데, 한번도 보지 못한 데이터에 대해서 정확도가 오히려 떨어질때.

 

Solutions for overfitting

1. 학습 데이터를 더 많이 모을것

2. regularization : 

12reg = 0.001 * tf.reduce_sum(tf.square(W))

 

3. Dropout (Neural Network에서의 simple한 방법, 2014)

Neural Network에서 우리가 엮어놨는데, 임의로 끊어버리고 몇개의 node를 drop시키는 방법이다.

이게 왜 될까?

훈련할 때 몇 명은 쉬게 해놓고 남은 사람을 가지고 훈련시킨다. 그 다음 훈련에서도 랜덤하게 몇 명을 쉬게 해놓고 훈련을 시킨다. 그리고 마지막에 모든 애들을 총 동원해서 예측을 한다. 

TensorFlow implementation (구현방법)

dropout_rate = tf.placeholder("float")

_L1 = tf.nn.relu(tf.add(tf.matmul(X, W1), B1))

L1 = tf.nn.dropout(_L1, dropout_rate) 

#0 .5하면 절반 drop시킴, 학습할때만 드랍시킴

 

 

TRAIN:

sess.run(optimizer, feed_dict={X: batch_xs, Y: batch_ys, dropout_rate: 0.7})

 

 

EVALUATION:

print "Accuracy:", accuracy.eval({X: mnist.test.images, Y: mnist.test.lavels, dropout_rate: 1})

# 평가나 실전할때는 drop 시키면 안됨.

 

What is Ensemble?

기계나 학습시킬수 있는 장비가 많을때 사용가능.

독립적으로 각각 똑같은 형태의 neural network를 만든다. training set은 갖게도 다르게도 줄 수 있다. 이것들을 각각 학습시킨다. 초기값이 다르므로 결과값이 조금씩 다를것이다. 그렇게 나온 값들을 합친다. 

실제로 해보면 2%~5%까지도 확률이 상승한다.

 

출처:

https://www.inflearn.com/course/%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B0%95%EC%A2%8C/lecture/3413

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함