딥러닝
-
오차역전파법 - 덧셈 계층, 곱셈 계층딥러닝 2020. 1. 27. 00:39
덧셈 계층과 곱셈 계층을 구현해봅시다. 각각 순전파와 역전파 모두 구현해야겠죠. 우선 덧셈 계층부터 봅시다. 순전파는 그냥 덧셈해주면 됩니다. 역전파는 각 입력에 대해 미분을 해주고 그 값을 곱해주면 됩니다.(합성함수 미분의 원리) 두 개 모두 미분값이 1이군요. 구현해봅시다. class AddLayer: def __init__(self): pass #순전파 def forward(self, x, y): return x + y #역전파 def backward(self, dout): dx = dout * 1 dy = dout * 1 return dx, dy 덧셈 계층은 역전파에서 순전파의 값을 이용하지 않습니다. 그래서 초기화가 필요없습니다.(pass : 아무것도 하지 말라) 곱셈 계층을 봅시다. 순전파는 ..
-
미니배치 학습 구현하기딥러닝 2020. 1. 16. 17:38
미니배치 학습이란 훈련 데이터 중 일부를 꺼내고(미니배치), 그 미니배치에 대해서 경사법으로 매개변수를 갱신하는 것 앞의 2층 신경망 클래스와 MNIST 데이터셋을 사용하여 구현해 봅시다. 이때 학습과정에서 오버피팅이 일어나지 않게 해야합니다. 어떻게 할까요? 학습 도중에 시험 데이터로 오버피팅이 일어나는지 안나는지 확인하면서 학습을 하면 됩니다. (신경망은 범용성을 가져야하므로 시험 데이터는 훈련 데이터와 달라야겠죠.) 오버피팅이 일어나면 학습을 중단하고 다른 데이터셋으로 훈련을 하면 됩니다. 일정 구간마다 평가를 하고 정확도를 기록하면 좋을 거 같네요. 구현 import numpy as np from dataset.mnist import load_mnist from two_layer_net impor..
-
2층 신경망 클래스 구현하기딥러닝 2020. 1. 16. 17:26
미니배치 학습을 구현해보기 전에 우선 2층 신경망 클래스를 구현해보겠습니다. 2층 신경망에 필요한 메소드(기능)는 무엇이 있을까요? 매개변수(가중치, 편향) 초기화, 예측값, 손실함수의 기울기, 정확도... 이 정도가 있겠네요. 그럼 구현해봅시다. import sys, os sys.path.append(os.pardir) from common.functions import* from common.gradient import numerical_gradient #2층 신경망 class TwoLayerNet: #가중치 초기화 #input_size : 입력층의 갯수 #hidden_size : 은닉층의 갯수 #output_size : 출력층의 갯수 #weight_init_std : ?? def __init__(s..
-
3층 신경망 구현해보기딥러닝 2020. 1. 10. 17:15
import numpy as np def sigmoid(x): return 1/(1+np.exp(-x)) def identy_function(x): return x def init_network(): network = {} 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], [0.2, 0.4]]) network['b3'] = np...
-
퍼셉트론딥러닝 2020. 1. 9. 14:37
'밑바닥부터 시작하는 딥러닝' 이라는 책을 참고하여 작성하였습니다. 퍼셉트론은 다수의 신호를 입력받아서 하나의 신호를 출력하는 것 입력이 2개인 퍼셉트론을 보도록 하자 x는 입력값, w는 가중치, b는 편향이라고 할 때 y = x1*w1 + x2*w2 + b y의 값이 1을 넘으면 1을 출력. 못넘으면 0을 출력 편향과 가중치는 다르다. 가중치는 각 입력 신호가 결과에 영향력을 조절하는 매개변수이고 편향은 뉴련이 얼마나 쉽게 활성화되는지 결정한다. 논리게이트 AND, NAND, OR, XOR를 구현해보도록 하자. import numpy as np import matplotlib.pyplot as plt def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5..