Implementation with python 11

[머신러닝 - Python] SIgmoid 계층 구현 (Sigmoid Class Implementation)

1. Sigmoid 함수 sigmoid 함수는 다음과 같습니다. \(y = \frac{1}{1 + exp(-x)}\) 이때 sigmoid 함수를 계산 그래프로 표현하면 아래의 사진과 같습니다. 숝 sigmoid에는 +, * 말고 새로운 exp, / 노드가 추가 되었습니다. 이때 주의해야 할 점은 계산 할 때는 국소적 미분으로 계산해야 한다는 점입니다. 해당 노드는 해당 노드의 미분 값만 계산해야 합니다. 1 단계 / 노드, 즉 \(y = \frac{1}{x}\)를 미분하면 다음 식이 됩니다. \(\frac{\partial y}{\partial x} = -\frac{1}{x ^ 2} = -y^2\) 따라서 상류에서 흘러온 값에 \(-y^2\)을 곱해서 하류로 보냅니다. 여기서 주의해야 할 점은 순전파때 사..

[머신러닝 - Python] ReLU 계층 구현 (ReLU class implementation)

1. ReLU 함수 \(y = \left\{\begin{matrix} x \,\, (x > 0) \\ 0 \,\, (x\leq 0) \end{matrix}\right.\) 이므로 x에 대한 y의 미분은 다음과 같습니다. \(\frac{\partial y}{\partial x} = \left\{\begin{matrix} 1 \,\, (x > 0) \\ 0 \,\, (x\leq 0) \end{matrix}\right.\) 따라서 순전파 때 입력의 크기인 x가 0보다 크면 역전파는 상류의 값을 그대로 흘려보냅니다. 반면, 순전파 때 x가 0보다 작으면 역전파 때는 하류로 신호를 보내지 않습니다. 2. 구현 class Relu: def __init__(self) -> None: self.mask = None d..

[머신러닝 - Python] 덧셈, 곱셈 노드 오차 역전파 구현 (Addition, Multiplication Back Propagation Implementation)

class MulLayer: # 곱셈 계층 def __init__(self) -> None: self.x = None self.y = None def forward(self, x, y): # 순전파, x와 y의 값을 저장해야만 backward때 사용할 수 있다. self.x = x self.y = y out = x * y return out def backward(self, dout): # 역전파로 상위 계층에서의 미분 값 * 반대 노드의 값을 출력한다. dx = dout * self.y dy = dout * self.x return dx, dy class AddLayer: # 덧셈 계층 def __init__(self) -> None: pass def forward(self, x, y): # 순전파, ..

[머신러닝 - Python] 2층 신경망 구현 (Two Layer Net Implementation)

from audioop import cross import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) from common import * import numpy as np class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std = 0.01) -> None: # 파라미터를 정규 분포로 초기화 함 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b..

[머신러닝 - Python] 기울기 구현 (Gradient Implementation)

함수 f를 받아서 중앙 차분을 이용하여 수치 미분하는 코드 정확한 미분 값을 구하지는 못하므로 수치 미분이라고 함 아무튼 해당 함수와 특정 좌표를 받아서 h라는 미세한 값을 더하고(A), 뺀 뒤(B), A와 B의 차이를 계산하여 기울기를 구하는 방식 좌표가 n개가 되면 각각의 n의 f 위에서의 기울기를 구한 뒤 반환함 만약 좌표가 2차원이라면 1개의 차원씩 잘라서 계산 후, 반환함 즉, f 함수에서 각각의 좌표에 해당하는 지점에서의 기울기를 구한다. import numpy as np def numerical_gradient(f, x): # 함수 f를 x 좌표에서의 편미분 값을 반환하는 함수 h = 1e-4 grad = np.zeros_like(x) for idx in range(x.size): tmp_v..

[머신러닝 - Python] 손실함수 - 오차제곱합, 교차엔트로피 합 구현 (Loss Function - Sum of Squares Error, Cross Entropy Error Implementation)

import numpy as np def sum_squares_error(pred, target): # 오차제곱합 return 0.5 * np.sum((pred - target) ** 2) def cross_entropy(pred, target): # 교차 엔트로피 합 delta = 1e-7 # log 0을 계산할 수 없으므로, 아주 작은 값을 넣음 return -np.sum(target * np.log(pred + delta)) if __name__== "__main__": target = np.array([0, 0, 1, 0, 0]) # 2가 정답 pred1 = np.array([0.1, 0.05, 0.6, 0.05, 0.2]) # 2 예측 pred2 = np.array([0.6, 0.1, 0.05,..

[머신러닝 - Python] MNIST 데이터 예측 모델 구현 (MNIST Data Predict Model Implementataion)

해당 코드는 제 작업 공간 기준이므로 import 등이 안 맞을 수 있습니다. 이 점 유의해서 봐주시면 될 것 같습니다. import sys, os import numpy as np import pickle from PIL import Image sys.path.append(os.pardir) from mnist import load_mnist from Activation_Function.func import sigmoid, softmax def img_show(img): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() def show_img(): # 첫 번째 이미지를 출력하는 함수 (input_train, target_train), (input_tes..

[머신러닝 - Python] 3층 신경망 구현 (3 Layer Neural Network Implementation)

import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def identity_function(x): # 항등 함수, 이 또환 활성화 함수임 return x def init_network(): network = dict() network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.2, 0.3]) network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) network['b2'] = np.array([0.1, 0.2]) network['W3'] = np.array([[0.1, 0.3], ..

[머신러닝 - Python] 활성화 함수 - 렐루 함수 구현 (Activation Function - ReLU Function Implementation)

최근에 많이 사용하고 있는 활성화 함수의 비선형 함수로는 ReLU 함수가 있습니다. ReLU 함수는 0보다 작은 값에 대해서는 0을 출력하고, 0이 넘으면 그 값을 출력하는 함수입니다. 즉 식은 아래와 같습니다. \(h(x) = \left\{\begin{matrix} x & x > 0 \\ 0 & x \leq 0 \\ \end{matrix}\right.\) 간단하죠? 이를 코드로 구현해보겠습니다. import numpy as np import matplotlib.pyplot as plt def ReLU(x): return np.maximum(0, x) x = np.array([-1.0, 1.0, 2.0]) print(ReLU(x)) x = np.arange(-5.0, 5.0, 0.1) y = ReLU(x..

[머신러닝 - Python] 활성화 함수 - 시그모이드 함수 구현 (Activation Function - Sigmoid Function Implemetation)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.10.18 - [Computer Science/머신러닝] - [머신러닝 - 이론] Logistic Regression (로지스틱 회귀) [머신러닝 - 이론] Logistic Regression (로지스틱 회귀) 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.05.07 - [Computer Science/머신러닝] - [머신러닝 - Python] 활성화 함수 - 시그모이드 함수 구현 (Activation Function - Sigmoid Function Implemetation) [머신러닝 - Python] hi-guten-tag.tistory.com 퍼셉트론은 계단 함수를 사용하지만, 이는 활성화 함수의 일부일 뿐이다. 실제로 제대로 된 신경망을 ..