본문 바로가기

TIL

(99)
에라토스테네스의 체(소수 찾기) 소수인지 확인하는 함수def is_prime(num): if num 위의 코드는 해당 수보다 작은 모든 수로 나누어 보아서 소수인지를 판단하는 방법으로, 소수의 정의에 충실한 방법이면서 무식하지만 가장 강력한 방법이다.한 개의 소수를 구할 때는 그런대로 괜찮은 방법인데 범위의 모든 소수를 구할 때는 효율적인 방법이 아니다.소수를 구하기 위해 에라토스테네스가 제안한 방법은 다음과 같다.에라토스테네스의 체범위에서 합성수를 지우는 방식으로 소수를 찾는 방법.1은 제거지워지지 않은 수 중 제일 작은 수(2)를 소수로 채택하고, 나머지 제일 작은 수(2)의 배수를 모두 지운다.지워지지 않은 수 중 제일 작은 수(3)을 소수로 채택하고, 나머지 제일 작은 수(3)의 배수를 모두 지운다.4는 2의 과정에서 지워..
계산그래프 신경망에 적용하기(ReLU, Sigmoid) 활성화 함수 계층 구현하기신경망을 구성하는 층 각각을 클래스 하나로 구현활성화 함수인 ReLU와 Sigmoid 계층을 구현1. ReLU활성화 함수에 사용되는 ReLU의 수식은 다음과 같다.$$y = \begin{cases} x & \text x > 0 \\ 0 & \text x \leq 0 \end{cases}$$위 식에서 $x$에 대한 $y$의 미분은 다음처럼 구한다.$$\frac{\partial y}{\partial x} = \begin{cases} 1 & \text x > 0 \\ 0 & \text x \leq 0 \end{cases}$$위 식과 같이 순전파 때의 입력인 $x$가 0보다 크면 역전파는 상류의 값을 그대로 하류로 흘린다.반면, 순전파 때 x가 0 이하면 역전파 때는 하류로 신호를 보내..
계산그래프 1. 계산 그래프(Computatuinal graph)계산 그래프는 계산 과정을 그래프로 나타낸 것그래프 자료구조로 복수의 노드(node)와 간선(edge)로 표현됨1.1. 계산 그래프로 풀다.문제 1 : 슈퍼에서 1개에 100원인 사과 2개를 샀습니다. 이때 지불 금액을 구하세요. 단, 소비세가 10% 부과됩니다.그림과 같이 처음에 사과의 100원인 'x 2' 노드로 흐르고, 200원이 되어 다음 노드로 전달된다.이제 200원이 'x 1.1' 노드를 거쳐 220원이 된다.따라서 이 계산 그래프에 따르면 최종 답은 220원계산 그래프를 이용한 문제풀이의 흐름계산 그래프를 구성한다.그래프에서 계산을 왼쪽 -> 오른쪽으로 진행한다.계산을 왼쪽 -> 오른쪽으로 진행하는 단계를 순전파(forward propag..
학습 알고리즘 1. 신경망 학습 절차신경망에는 적응 가능한 가중치와 편향이 있다.가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 학습이라고 한다.신경망 학습은 다음과 같이 4단계로 수행한다.미니배치훈련 데이터 중 일부를 무작위로 가져온다.이렇게 선별한 데이터를 미니배치라 하며, 미니배치의 손실 함수 값을 줄이는 것이 목표기울기 산출미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구한다.기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시한다.매개변수 갱신가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다.반복1 ~ 3단계를 반복한다.2. 2층 신경망 클래스 구현class TwoLayerNet: def __init__(self, input_size, hidden_size, outp..
경사법 1. 수치 미분(numerical differentiation)수치 미분이란 해석적 미분을 근사치로 계산하는 방법이다.경사법에서는 기울기(경사) 값을 기준으로 나아갈 방향을 정한다.기울기란 무엇인지, 어떤 성질이 있는지 알아보기에 앞서, 미분부터 복습해보자1.1. 미분미분은 한순간의 변화량을 표시한 것이다.$$\frac{df(x)}{dx} = \lim_{{h \to 0}} \frac{f(x + h) - f(x)}{h}$$좌변은 $f(x)$의 x에 대한 미분을 나타내는 기호이다.결국, x의 '작은 변화'가 함수 $f(x)$를 얼마나 변화시키느냐를 의미한다.이때 시간의 작은 변화, 즉 시간을 뜻하는 h를 한없이 0에 가깝게 한다는 의미를 $\lim_{{h \to 0}}$로 나타낸다.def numerical_..
손실 함수 1. 손실함수신경망이 최적의 매개변수 값을 탐색하는데 사용하는 지표1.1. 오차제곱합가장 많이 쓰이는 손실 함수는 오차제곱합(SSE, sum of squares for error)이다.$$\text{E} = \frac{1}{2}\sum_{k} (y_k - t_k)^2$$$y_k$는 신경망의 출력, $t_k$는 정답 레이블, k는 데이터의 차원 수를 나타낸다.import numpy as npdef sum_squares_error(y, t): return 0.5 * np.sum((y-t)**2)# 정답은 2인 원-핫 인코딩t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]# 예1 : '2'일 확률이 가장 높다고 추정(0.6)y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0..
소프트맥스 함수 1. 소프트맥스 함수$$y_k = \frac{exp(a_k)}{\sum_{i=1}^{n} exp(a_i)}$$exp(x)는 $e^{x}$을 뜻하는 지수 함수이다. e는 자연상수n은 출력층의 뉴런 수, $y_k$는 그중 k번째 출력분모 : 모든 입력 신호의 지수 함수의 합분자 : 입력 신호 $a_k$의 지수 함수1.1. 소프트맥스 함수 구현def softmax(a): exp_a = np.exp(a) # 지수 함수 sum_exp_a = np.sum(exp_a) # 지수 함수의 합 y = exp_a / sum_exp_a return ya = np.array([0.3, 2.9, 4.0])print(softmax(a))# 출력 : [0.01821127 0.24519181 0.7365969..
Numpy 다차원 배열의 계산 1. 다차원 배열의 계산넘파이의 다차원 배열을 사용한 계산법을 숙달하면 신경망을 효율적으로 구현할 수 있다.1.1. 다차원 배열2차원 배열import numpy as npB = np.array([[1,2], [3,4], [5,6]])print(B)print(np.ndim(B))print(B.shape) """ 출력 [[1 2] [3 4] [5 6]]2(3, 2)""" numpy 배열의 차원 수는 np.ndim() 함수로 확인할 수 있다.numpy 배열의 형상은 인스턴스 변수인 shape로 확인할 수 있다.1.2. 행렬의 곱 계산 방법행렬 곱은 왼쪽 행렬의 행과 오른쪽 행렬의 열을 원소별로 곱하고 그 값들을 더해서 계산한다.그리고 그 계산 결과가 새로운 다차원 배열의 원소가 된다.계산 방법에 의해서 왼쪽..
활성화 함수 1. 시그모이드 함수1. 1. 시그모이드 함수란?$$h(x) = \frac{1}{1 + exp(-x)}$$exp(-x)는 $e^{-x}$를 뜻하며, e는 자연상수이다.신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달한다.1. 2. 시그모이드 함수 구현import numpy as npdef sigmoid(x): return 1 / 1 + np.exp(-x))여기서 np.exp(-x)가 exp(-x) 수식에 해당한다.이 함수는 x가 넘파이 배열이여도 제대로 처리할 수 있다.x = np.array([-1.0, 1.0, 2.0])print(sigmoid(x))# 출력 : [0.26894142 0.73105858 0.88079708]이 함수가 넘파이 ..
Django - 도메인이 다를 경우 Cookie.set() 진행중인 프로젝트가 개발 단계에서 배포 단계로 넘어가면서access, refresh 둘 다 그냥 쿠키에서 저장하던 것을refresh를 HTTP Only로 바꾸려고 코드를 작성해보았다.  Djangoclass CookieTokenObtainPairView(TokenObtainPairView): def finalize_response(self, request, response, *args, **kwargs): if response.data.get('refresh'): cookie_max_age = 3600 * 24 * 14 response.set_cookie( key='refresh', value=..