
matrix multiplication을 잘 활용한다.
XW+B 연산이 이루어지기 위해선 W의 형상을 잘 맞춰 주어야함. 입력은 (1,2), 첫번째 hidden layer는 (1,3)이므로 둘사이의 W의 형상은 (2,3)이 되어야함. 똑같은 방식으로 첫번째 hidden layer와 두번째 hidden layer 사이의 W의 형상은 (3,2)가 된다. 이를 표현하면 아래 그림과 같음.

hidden layer, 입력갯수, 출력 갯수를 입력받을 때 매개변수의 형상을 바로 설정해주는 class
import numpy as np
import activation as act
class ThrereLayers:
def __init__(self,hidden,input,output):
self.network = {}
self.n = len(hidden)+1
prev = input
for i in range(len(hidden)):
self.network[f'W{i+1}'] = np.random.randn(prev,hidden[i])
self.network[f'B{i+1}'] = np.random.randn(1,hidden[i])
prev = hidden[i]
self.network[f'W{self.n}'] = np.random.randn(prev,output)
self.network[f'B{self.n}'] = np.random.randn(1,output)
def forward(self,x):
Z = x
A = x
for i in range(self.n):
A = np.dot(Z,self.network[f'W{i+1}']) + self.network[f'B{i+1}']
Z = act.sigmoid(A)
print(A)
TL = ThrereLayers([3,2],2,2)
TL.forward([1.0,0.5])