일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MFC 프로그래밍
- 모두의 딥러닝 예제
- c++공부
- 파이토치 강의 정리
- TensorFlow
- 해리스 코너 검출
- tensorflow 예제
- object detection
- 영상처리
- pytorch zero to all
- 딥러닝 공부
- matlab 영상처리
- 파이토치 김성훈 교수님 강의 정리
- c언어 정리
- 모두의 딥러닝
- 골빈해커
- 김성훈 교수님 PyTorch
- 케라스 정리
- 딥러닝 스터디
- 딥러닝
- pytorch
- 파이토치
- 팀프로젝트
- 컴퓨터 비전
- c언어
- C언어 공부
- c++
- Pytorch Lecture
- 미디언 필터링
- 가우시안 필터링
- Today
- Total
ComputerVision Jack
[골빈해커 Chapter6 정리] 본문
[개념 정리]
Mnist 데이터를 이용한 신경망 학습
우선 데이터를 분석한다. mnist의 데이터는 28 * 28 사이즈의 이미지로 되어있다.
X = tf.placeholder(tf.float32, [None, 784])
Y = tf.placeholder(tf.float32, shape = [None, 10])
#우리는 이미지를 통으로 집어 넣기 때문에 feature 사이즈는 28 * 28 = 784이다.
그리고 label은 (0 ~ 9) 까지 이기 때문에 10으로 설정한다.
미니 배치 : 데이터를 적당한 크기로 잘라서 학습시키는 것
배치 사이즈를 설정하고 데이터가 한바퀴 다 돌아야 1epochs 라고 한다.
W1 = tf.Variable(tf.random_normal([784, 256], stddev = 0.01))
L1 = tf.nn.relu(tf.matmul(X, W1))
W2 = tf.Variable(tf.random_normal([256, 256], stddev = 0.01))
L2 = tf.nn.relu(tf.matmul(L1, W2))
W3 = tf.Variable(tf.random_normal([256, 10], stddev = 0.01))
model = tf.matmul(L2, W3)
#신경망 층을 만들어 준다. 일반적으로 은닉층은 입력 shape보단 작은게 좋다.
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = model, labels = Y))
optimizer = tf.train.AdamOptimizer(learning_rate = 0.001).minimize(cost)
# cost함수 설정한다 logits_v2로 바뀐것을 명심히자.
최적화는 Adam을 사용하였다.
DropOut(드롭 아웃)
과적합을 해결 하는 방법
학습시 신경망의 일부만 사용하도록 하고 ( 가중치의 균형을 잡아준다.)
예측에서 신경망의 전체를 이용하는 원리.
W1 = tf.Variable(tf.random_normal([784, 256], stddev = 0.01))
L1 = tf.nn.relu(tf.matmul(X, W1))
L1 = tf.nn.dropout(L1, 0.8)
#신경망의 뒷부분에 dropout을 설정한다.
L1 층에 대해 80%만 활성화 시킨다는 것을 의미한다.
대부분 keep_prob이라는 변수를 이용하여 placeholder를 생성하고 feed_dict으로 던져준다.
최근 추세
배치 정규화
tf.layers.batch_normalization(L1, training = is_training)
과적합을 막아줄 뿐아니라 학습 속도도 향상시켜 준다.
마지막으로 matplotlib 라이브러리를 사용하여 결과를 출력해본다.
[코드 분석]
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
_, cost_val = sess.run([optimizer, cost], feed_dict = {X: batch_xs, Y: batch_ys})
# batch_size를 설정해 주면 알아서 데이터를 읽어온다.
is_correct = tf.equal(tf.argmax(model, 1), tf.argmax(Y, 1))
# tf.argmax() 를 통하여 내모델에서 가장 크게 차지하는 값을 뽑아 본다.
[ 0.2, 0.3, 0.4, 0.2, 0.3, 0.5, 0.1, 0.2, 0.3, 0.4]
식일 경우 argmax()를 통하여 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0] 식으로 만들어낸다.
그리고 실제 라벨과 같은 지 판별한다.
keep_prob = tf.placeholder(tf.float32)
#위 형식으로 dropout 설정할 변수를 placeholder로 생성
(0 ~ 1 사이의 값으로 설정한다)
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)
# dropout을 설정한다.
_, cost_val = sess.run([optimizer, cost],
feed_dict = {X: batch_xs, Y: batch_ys, keep_prob: 0.8})
#feed_dict을 통하여 값을 던저준다.
학습때는 80%의 노드만 활성화 시키겠다.
print('정확도 : ',sess.run(accuracy, feed_dict = {X: mnist.test.images, Y: mnist.test.labels, keep_prob: 1}))
#이제 실제의 결과를 예측할 때 모든 노드를 활성화 시켜서 확인한다.
'DeepLearning > 골빈해커 - Tensor Lib' 카테고리의 다른 글
[골빈해커 Chapter8 정리] (0) | 2020.01.19 |
---|---|
[골빈해커 Chapter7정리] (0) | 2020.01.17 |
[골빈해커 Chapter5 정리] (0) | 2020.01.15 |
[골빈해커 Chapter4 정리] (0) | 2020.01.14 |
[골빈해커 Chapter3 정리] (0) | 2020.01.13 |