본문 바로가기

implement_ml_models

(94)
implement_forwardPropagation MLP의 구현 먼저 노드간 계산을 위한 mlp 클래스 생성 class mlp: # 가중치 w w = [] x_b = [] def __init__(self): self.w = [] def cal_dense(self, input, unit): """ Args input : 입력 데이터 unit : 은닉층 노드의 개수 return 각 가중치 별 입력 데이터와의 연산 결과 """ # 입력 데이터에 편향 가중치를 위한 열, 1의 추가 self.x_b = np.c_[input, np.ones((input.shape[0],1))] # 가중치 w의 생성 self.w = np.random.rand(self.x_b.shape[0], unit) return input.T.dot(self.w) hidden_input = m...
implement_differential 역전파 계산을 할 때, 가중치에 변화량에 대한 오차 함수의 변화량을 구하기 위해 미분이 사용, 오차 함수, 활성화 함수의 차이에 따른 그 식이 바뀌고, 이를 적용하기 위해서는 각 함수의 미분값을 구해야 한다. 우선 가장 대표적인 오차 제곱합, 시그모이드 활성화 함수 예제를 통한 확인 오차 제곱합의 비용 함수 행렬을 통한 일반화 각 벡터 성분에 미분을 수행, 먼저 각 행렬에 대한 미분을 위한 심볼화 Y = sympy.Symbol('Y') T = sympy.Symbol('T') 오차 함수 C의 정의 C = 1/2*(Y-T)**2 오차 함수의 미분 계산 d_C = sympy.diff(C, Y) d_C.subs([(Y,1),(T,2)]) >>> -1.0 Y, T 에 값을 대입하여 예측값과 출력값의 오차 함수에 ..
implement_pooling 데이터의 차원을 줄이는 방법, 스트라이드를 적용할 수 있다. stride_row = 2 stride_col = 2 pool_row = 2 pool_col = 2 result_arr = [] for matrix_row in range(0, input.shape[0], stride_row): for matrix_col in range(0, input.shape[1], stride_col): result = [] for row in range(pool_row): for col in range(pool_col): result.append(input[matrix_row+row,matrix_col+col]) result_arr.append(result) 풀링과 스트라이드 사이즈를 지정한다. result_arr >>..
implement_stride 2022.11.22 - [implement_ml_models] - implement_cnn implement_cnn 합성곱 연산을 사용하는 신경망 row = [] matrix = [] for matrix_row in range(input.shape[0]-w.shape[0]+1): for matrix_col in range(input.shape[1]-w.shape[1]+1): matrix = [] for w_row in range(w.shape[0]): row = [] for w_col in range(w.shape[0]): teach-meaning.tistory.com 스트라이드는 합성곱 연산 후 다음 계산 영역 선택 간격을 정하는 값 이전 합성곱 연산 result_arr = [] for matrix_r..
implement_padding 2022.11.22 - [implement_ml_models] - implement_cnn implement_cnn 합성곱 연산을 사용하는 신경망 row = [] matrix = [] for matrix_row in range(input.shape[0]-w.shape[0]+1): for matrix_col in range(input.shape[1]-w.shape[1]+1): matrix = [] for w_row in range(w.shape[0]): row = [] for w_col in range(w.shape[0]): teach-meaning.tistory.com 패딩 패딩을 통해 입력 데이터 주변을 특정값으로 채울 수 있다. 입력의 커널에 대한 합성곱 연산 후 입력과 동일한 크기의 결과를 만들기 ..
implement_cnn 합성곱 연산을 사용하는 신경망 row = [] matrix = [] for matrix_row in range(input.shape[0]-w.shape[0]+1): for matrix_col in range(input.shape[1]-w.shape[1]+1): matrix = [] for w_row in range(w.shape[0]): row = [] for w_col in range(w.shape[0]): row.append(input[matrix_row+w_row,matrix_col+w_col]) matrix.append(row) print(matrix) 각 커널에 대한 합성곱 연산을 할 행렬, matrix의 생성, 이는 가중치 행렬과 동일한 크기다. row = [] matrix = [] resul..
implement_activation def step_fun(x): """ 계단 함수 입력이 0 이하일 경우 0을 출력하고 0을 초과할 때 1을 출력 Args: x : 입력값 Return: 0 or 1 """ if x < 0: return 0 else: return 1 def sign_fun(x): """ 부호 함수 입력이 0 미만일 경우 -1을 출력하고 0을 초과할 때 1을 출력 0일 때 0을 출력 Args: x : 입력값 Return: -1,0 or 1 """ if x < 0: return -1 elif x == 0: return 0 else: return 1 def sigmoid_fun(x): """ 시그모이드 함수 지수 함수를 사용한 0~1 사이의 값 출력 Args: x : 입력값 Return: 0~1 """ return 1/(1+n..
implement_multiLayerPerceptron 다층 퍼셉트론은 퍼셉트론의 층이 여러 개인 것, 함수 형태로 표현하면, 위와 같은 체인 구조가 많이 쓰인다. 오차 역전파 다층 퍼셉트론에서 최적값을 찾아가는 과정은 오차 역전파 방법을 사용 input = np.array([[1,2,3]]) target = np.array([[0.5,0.1]]) (1) 가중치 초기화 임의의 가중치 지정 ( 이러한 초기 가중치를 설정하는 방법도 존재 ) w1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]]) w2 = np.array([[0.7,0.9],[0.8,0.1]]) b1 = np.array([[0.5],[0.5]]) b2 = np.array([[0.3],[0.3]]) wl는 각 층 l 에 대한 가중치고 w의 각 행 값은 다음 노드의 입력에 대..