목록분류 전체보기 (52)
0과 1 사이
이름하여 Vegan restaurants in Seoul 이다. 본 프로젝트는 데이터를 응용한 웹개발 수업의 과제였고, 2주안에 만든 첫 웹개발이기 때문에 아주 뛰어난 퀄리티는 못된다. 또 주제가 흥미로웠으나 데이터가 부족하다는 단점이 있다. 그러나 서울시에서 서울 비건식당 목록 데이터를 공개해준 덕분에 '서울'에 한정해서만 레스토랑 목록을 보여주는 홈페이지를 개발했다. 해당 데이터는 https://news.seoul.go.kr/welfare/public_health/status-of-vegetarian-restaurants 에서 엑셀로 다운받을 수 있다. 엑셀로 다운받으면 sql로 가져와서 데이터를 이용하면 된다. 도메인을 사지는 않았기 때문에 localhost에서만 접속가능하다. 메인 화면에서 검색창..
간단한 신경망에서 기울기 계산 형상이 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()
class_name, info = line.split(':', 1) 위 코드를 실행하다가 에러가 났다. :으로 쪼개면 2개가 나와야하는데 1개가 나온다는 뜻인것같은데.. class_name과 info를 출력했더니 원하던대로 출력됨.. 2day가 class_name이고 그 밑에 99%로 시작하는 문장 전체가 info다. 잘되고있는데 도대체 왜 에러가 뜨는것인가 그래서 예외처리를 이용해 ValueError가 나도 그냥 지나가도록 해봤다 try: class_name, info = line.split(':', 1) except ValueError as e: pass 이렇게 하니까 잘 실행된다~