본문 바로가기

Studying/Deep Learning

(8)
[딥러닝] tf.GradientTape(), gradient() 이해하기 처음 딥러닝을 공부할 때, x_data = [1,2,3,4,5] y_data = [1,2,3,4,5] W = tf.Variable(2.0) b = tf.Variable(0.5) with tf.GradientTape() as tape: hypothesis = W * x_data + b #hypothesis cost = tf.reduce_mean(tf.square(hypothesis - y_data)) #cost W_grad, b_grad = tape.gradient(cost, [W, b]) #W_grad = 25.0, b_grad = 7.0 W.assign_sub(learning_rate * W_grad) b.assign_sub(learning_rate * b_grad) 이 부분이 나오는데 실제로 함수가 ..
[모두를 위한 딥러닝] 7일차 stride: filter가 움직이는 크기pad: 바깥의 빈공간(보통 1을 줘서(filter가 3*3) 가장자리 부분도 filter가 갈 수 있게 해줌) pooling = sampling 비슷한 것 한 layer을 뽑아서 사이즈를 작게 만드는 것
[모두를 위한 딥러닝] 6일차 forward는 W,b 값을 미리 정해서 대입 backpropagation 은 편미분을 해서 뒤에서 부터 앞의 값을 알아냄 sigmoid 함수 (S 모양) 을 사용하면 정확도가 0.5 에서 멈춘다. 그 이유는 layer가 많아질수록 input쪽에 가까운 것은 영향력이 적어진다. (Vanishing gradient) 0~1 의 값임으로 0.001 같은 값들이 반복해서 곱해지기 때문에 그래서 이것을 보완하기 위해 ReLu 라는 것을 사용한다. ReLu는 0이하는 0, 0이상은 linear한 것이다. 그리고 마지막에는 sigmoid를 사용한다. 왜냐하면 결과를 0~1 값으로 표현하기 위해서 이다. maxout eLu tanh 등 다른 함수도 있다. 초기값 잘 설정하는 법 모두 0은 안 된다. forward b..
[모두를 위한 딥러닝] 5일차 Learning rate 알파값Learning rate를 잘 정해야 한다. 너무 크면 한 번에 너무 많이 움직여서 포물선에서 왔다갔다하거나 바깥으로 나갈 수 있다. (overshooting)너무 작으면 시간이 너무 오래 걸려서 중간에 멈출 수도 있다. 특별한 답은 없다. 보통 처음에 0.01 로 지정하고 반복해서 찾아야한다. X 데이터를 preprocessing 을 잘 설정 해야하는 이유. X 데이터의 값이 차이가 크면 원 모양(등고선)이 아니라 한 쪽으로 치우쳐져서 (한 쪽의 등고선이 너무 좁아짐) 알파값이 잘 정해져도 안 발산이 일어날 수 있다. x'j = (xj - uj)/o'(시그마) overfitting 학습 데이터에 너무 최적이다보면 실제 데이터에는 안 맞을 수도 있다. 해결법은 trainin..
[모두를 위한 딥러닝] 4일차 cost function이 1/(1+e^-W^TX) 일 경우 linear 하지 않으므로 중간에 다른 값에서 멈출 수 있어서 사용할 수 없다. 그래서 cost function 을 바꿔야한다. cost(W) = 1/m(시그마 c(H(x),y) c(H(x),y) = -log(H(x)) : y = 1 -log(1-H(x)) : y = 0 e 함수를 역함수인 로그로 바꿈 cost 함수는 예측 값과 실제 값이 같으면 작아지고 틀리면 커지는 것 y=1H(x) = 1 -> cost(1) = 0 H(x) = 0 -> cost = 무한 잘못 y=0H(x) = 0, cost = 0 H(x) = 1, cost = 무한 잘못 C(H(x),y) = -log(H(x)) - (1-y)log(1-H(x)) //if문을 없애서 표현 y..
[모두를 위한 딥러닝] 3일차 Hypothesis H(x)= Wx + b W와 b를 학습Cost function cost(W,b) = 1/m(시그마(H(xi)-yi)^2)Gradient descent algorithm multi-variables H(x1,x2,x3) = w1x1 + w2x2 + w3x3cost(W,b) = 1/m(시그마(H(x1i,x2i,x3i)-yi)^2) 너무 복잡해져서 해결법은 Matrix 이용 (x1 x2 x3) ( w1 ) = (x1w1 + x2w2 + x3w3) w2w3 H(X) = XW
[모두를 위한 딥러닝] 2일차 supervised 데이터를 가지고 학습 regression 범위를 사용 Cost function(Loss function): 가설과 실제 데이터가 얼마나 차이나는 지 (H(x) - y)^2 -> 제곱을 함으로써 차이를 양수로 나타내고 차이가 크면 차이가 더 커진다. 각 점마다 따로 구해서 평균을 구하면 cost cost = 1/m (시그마(H(xi) -yi)^2) minmize cost(W, b) 하게 하는 W, b를 구해야한다. Gradient descent algorithm: 주어진 코스트를 최소화하는 데 이용 어느 점에서든지 시작을 한 뒤, W를 조금씩 바꾸면서 경사도를 계산한다. cost = 1/2m (시그마(H(xi) -yi)^2) W := W - a d/dW cost(W) 알파 라운드 -> ..
[모두를 위한 딥러닝] 1일차 핵심regression, classification Supervised/UnsupervisedSupervised: labeled data(training set)을 가지고 학습 UnSupervised:un-labeled data (google news grouping, word clustering) regreesion 모델은 점수classification 모델은 P/F 나 학점 같이binary, multi-label /// TensorFlow 1. 그래프를 그린다.2. sess.run(op) session을 만들고 session을 이용해 실행3. 그래프에서 변수 업그레이드 rank: 스칼라, 벡터, 배열 형식으로 커지는 것 shape: 차원 변수의 개수type: 변수의 타입