def forward(netwrok, x): """ forward propagation(순방향 전파) forward(각 가중치 행렬, x = 이미지 1장) 파라미터 x: 이미지 한 개의 정보를 가지고 있는 배열(784,) / 사이즈만 있고, 1차원인 배열 행이 1개이고 원소의 갯수가 784개인 데이터 """ # 가중치 행렬(weight matrices) W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3'] # 첫번쨰 은닉층 a1 = x.dot(W1) + b1 # 첫번째 은닉층에서 나오는 출력값 (z1) z1 = sigmoid(a1) # shorcut: z1 = sigmoid(x.dot(W1) + b1) # 두번째 은닉층 a2 = z1.dot(W2) + b2 z2 = sigmoid(a2) # 출력층 a3 = z2.dot(W3) + b3 y = softmax(a3) return y
def forward(network,x): # x는 1차원이 아닌 2차원이라고 가정한다 # 가중치 행렬 W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3'] z1 = sigmoid(x.dot(W1) + b1) # 첫번째 은닉층 (propagation) z2 = sigmoid(z1.dot(W2) + b2) # 두번째 은닉층 (propagation) y = softmax(z2.dot(W3) + b3) # output layer return y
def predict(network, X_test): """ 신경망에서 사용되는 가중치행렬과 테스트 데이터를 전달받아서 테스트 데이터의 예측값(배열)을 리턴 """ W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3'] a1 = X_test.dot(W1) + b1 z1 = sigmoid(a1) a2 = z1.dot(W2) + b2 z2 = sigmoid(a2) pred = z2.dot(W3) + b3 return softmax(pred)
def forward(network, x): """ x : 이미지 한 개의 정보를 가지고 있는 배열(784, ) """ # 가중치, 편향 행렬 W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3'] a1 = x.dot(W1) + b1 z1 = sigmoid(a1) a2 = z1.dot(W2) + b2 z2 = sigmoid(a2) a3 = z2.dot(W3) + b3 y = softmax(a3) return y
def forward(network, x): """ ex08의 forward에서 마지막에 mini_batch 활성 함수에 넣어줌 """ # 가중치 행렬 (weight matrices) W1, W2, W3 = network['W1'], network['W2'],network['W3'] b1, b2, b3 = network['b1'], network['b2'],network['b3'] # 첫번째 은닉층 a1 = x.dot(W1) + b1 z1 = sigmoid(a1) # 두번째 은닉층 a2 = z1.dot(W2) + b2 z2 = sigmoid(a2) #output layer a3 = z2.dot(W3) + b3 y = softmax(a3) return y
def forward(network, x): """ 순방향 전파(forward propagation). 파라미터 x: 이미지 한 개의 정보를 가지고 있는 배열. (784,) """ # 가중치 행렬(Weight Matrices) W1, W2, W3 = network['W1'], network['W2'], network['W3'] # bias matrices b1, b2, b3 = network['b1'], network['b2'], network['b3'] # 첫번째 은닉층 a1 = x.dot(W1) + b1 z1 = sigmoid(a1) # 두번째 은닉층 a2 = z1.dot(W2) + b2 z2 = sigmoid(a2) # 출력층 a3 = z2.dot(W3) + b3 y = softmax(a3) return y
import numpy as np from ch03.ex05 import softmax if __name__ == '__main__': x = np.array([1, 2, 3]) s = softmax(x) print(s) X = np.array([[1, 2, 3], [4, 5, 6]]) s = softmax(X) print(s) # NumPy Broadcast(브로드캐스트) # NumPy array의 축(axis) # axis=0: row의 인덱스가 증가하는 축 # axis=1: column의 인덱스가 증가하는 축 # array과 scalar 간의 브로드캐스트 x = np.array([1, 2, 3]) print('x =', x) print('x + 10 =', x + 10) # 2차원 array와 1차원 array 간의 브로드캐스트 # (n, m) array와 (m,) 1차원 array는 브로드캐스트가 가능 # (n, m) array와 (n,) 1차원 array인 경우는, # 1차원 array를 (n,1) shape으로 reshape를 하면 브로드캐스트가 가능. X = np.arange(6).reshape((2, 3)) print('X shape:', X.shape) print('X =', X) a = np.arange(1, 4)
import numpy as np from ch03.ex05 import softmax if __name__ == '__main__': X = np.array([[1, 2, 3], [4, 5, 6]]) s = softmax(X) print(s) # NumPy Broadcast(브로드캐스트) # NumPy array의 축(axis) # axis=0: row의 인덱스가 증가하는 축 # axis=1: column의 인덱스가 증가하는 축 # array과 scalar 간의 브로드캐스트 x = np.array([1, 2, 3]) print('x =', x) print('x + 10 =', x + 10) print('===========') # 2차원 array와 1차원 array 간의 브로드캐스트 # (n, m) array와 (m,) 1차원 array는 브로드캐스트가 가능 # (n, m) array와 (n,) 1차원 array인 경우는, # 1차원 array를 (n,1) shape으로 reshape를 하면 브로드캐스트가 가능. X = np.arange(6).reshape((2, 3)) print('X shape:', X.shape) print('X =', X) a = np.arange(1, 4) print('a shape:', a.shape) print('a =', a)