티스토리 뷰
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%까지도 확률이 상승한다.
출처:
'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글
딥러닝으로 MNIST 98%이상 해보기 (1) | 2019.05.09 |
---|---|
레고처럼 넷트워크 모듈을 마음껏 쌓아 보자 (0) | 2019.05.08 |
Weight 초기화 잘해보자 (0) | 2019.05.08 |
XSigmoid 보다 ReLU가 더 좋아 (0) | 2019.05.08 |
Tensor Board로 딥네트웍 들여다보기 (0) | 2019.05.07 |