목록딥러닝 공부 (7)
0과 1 사이
안녕. 오랜만이다. 이전에 조사했던 내용을 새로 포스팅하려한다. 구글에 '수어 번역'을 검색하면 내 블로그가 제일 먼저 나온다. 꾸준하게 저 글만큼은 방문하는 사람이 정말 많다. 그러나... 나도 아직 주니어이다. ㅜ 저 프로젝트 또한 내 인생의 첫 개발프로젝트였다. 더군다나 문서화에 익숙지 않다보니 사람들이 한번 방문은 해보지만, 그냥 다시 나가는 듯 하여.... 혹여나 일년전의 나처럼 헤맬 누군가가 있을까봐 문서화를 좀 더 열심히 해보기로 했다. 반겨주시길!!^^ 기존의 수어 번역 CNN 오픈소스 EvilPort2 github.com/EvilPort2/Sign-Language GitHub - EvilPort2/Sign-Language: A very simple CNN project. A very si..
간단한 신경망에서 기울기 계산 형상이 2*3인 net.W에 대한 기울기 dW를 구하는 코드. 이 떄 W와 dW의 형상은 항상 같다. 책과 결과값이 다른데, W의 매개변수를 랜덤하게 가져오기 떄문에 당연하다. 2층 신경망에서의 기울기 계산 중간중간의 에러는 오타로 인한 것이니 패스하자. 결과는 책과 비슷하게 잘 나온다. 다만 grads를 계산할 때 시간이 굉장히 오래걸린다.. W, b가 형상이 크기 때문에 어쩔 수 없는듯. 훈련과 평가 시간이 너무 오래걸리는 바람에 전부 트레이닝 시키는 것은 포기..
손실함수 교차제곱 손실함수의 경우 모든 인덱스의 신경망 출력과 정답 레이블의 차를 제곱해 더하는 반면, 교차 엔트로피 손실함수의 경우 정답 인덱스만 계산에 들어간다. 정답 레이블인 t가 정답 인덱스만 1이고 나머지는 0인 원앤핫 인코딩으로 이루어져 있기 때문. 미니배치 훈련 데이터 모두를 이용하여 학습하고 그에 대한 손실함수를 모두 더하는 것은 시간관계상 매우 오래걸린다. 이에 따라 미니배치의 크기를 정해두고 전체 훈련 데이터에서 미니배치의 크기만큼 뽑아서 학습시키고, 손실함수를 계산한다. tv 프로그램의 시청률을 계산할 때 무작위로 추출하여 계산한 다음 전체 시청률로 근사하는것과 비슷한 이치다. 왼쪽에 무작위로 선택한 인덱스들이 나타난다. 기울기 처음에는 최종 gradient_descent가 -3.5,..
신경망 예측 시그모이드 값을 계산할 때 오버플로우가 발생했다. 책과 똑같이 따라했는데 책에서는 안나오던 에러가 발생하는 이유는 뭘까.. A1, A2, A3를 출력해봤다. 순서대로 A1, A2, A3, 예측결과인데 A1을 출력하고나서 바로 오버플로우 warning을 출력했다. A1 안의 값을 보면 1286 등 큰 수가 들어가있는데 이렇게 큰 수가 들어가니까 오버플로우가 난것같다. 다만 큰 수가 들어가는 경우 0으로 근사되기 때문에 경고는 무시하고 넘어가도 될것같다. 위의 경우 7번쨰 인덱스의 확률이 가장 크므로 예측 결과가 7임을 알수있다. 정확도 계산 그 다음으로 정확도를 출력해봤다. 내 결과는 처음에 0.9207이 나왔는데, 책에서는 0.9352가 나온다고 한다. 왜 이런가 해서 코드를 자세히 살펴보니..
AND, NAND, OR, XOR 게이트를 퍼셉트론으로 구현해보자. 정의에 대한 설명은 생략한다. import numpy as np def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]) b = -0.7 tmp = np.sum(w*x) + b if tmp
행렬 곱 기본적인 행렬 곱. 고등수학에서도 나오는 얘기지만 행렬 곱을 위해서는 차원이 맞아야 한다. A가 m*n 행렬이라면 B는 n*l 행렬이어야 행렬 곱이 가능하다. 다시말해 A의 열의 개수와 B의 행의 개수가 같아야 한다. 여기까지는 기본적인 이야기다. 3층 신경망 구현 3층 신경망 중 입력층에서 1층으로 가는 과정을 구현했다. 다시 말해 A1 = X*W1 + B 을 구현한 것. 그런데 A1을 구하는 과정에서 B를 더하는 것 없이 두 행렬의 곱셈만으로도 구할 수 있지 않나? 싶어서 이 방법으로 해봤다. 두 행렬의 곱셈만으로 구하는 방법은 X의 맨 앞 원소를 1로 두고 W1의 첫 행을 B로 두는 것이다. 그런데 해보니까 알겠다. 이렇게 하는것이 오히려 더 복잡하다.. 같은 결과를 출력하지만 코드가 훨씬..
밑바닥부터 시작하는 딥러닝 책을 공부 중인데 틈날 때마다 적으려 한다. 사실 시작한지는 꽤 되었으나 앞부분 내용부터 올린다. 시그모이드, 계단함수, Relu 함수 구현 import numpy as np import matplotlib.pylab as plt def step_function(x): return np.array(x>0, dtype = np.int) def sigmoid(x): return 1/(1+np.exp(-x)) def relu(x): return np.maximum(0, x) x = np.arange(-5.0, 5.0, 0.1) y = step_function(x) plt.plot(x, y) plt.ylim(-0.1, 1.1) plt.show()